Tôi đang làm việc trong một dự án bài tập về nhà và tôi phải thực hiện một truy vấn cơ sở dữ liệu tìm thấy các chuyến bay theo tên thành phố hoặc mã sân bay, nhưng flights
bảng chỉ chứa mã sân bay nên nếu tôi muốn tìm kiếm theo thành phố, tôi phải tìm kiếm tham gia trên airports
bàn
Bảng sân bay có các cột sau: code, city
Bảng chuyến bay có các cột sau: airline, flt_no, fairport, tairport, depart, arrive, fare
Các cột fairport
và tairport
là từ và đến sân bay.
Các cột depart
và arrive
là ngày khởi hành và đến.
Tôi đã đưa ra một truy vấn đầu tiên tham gia các chuyến bay trên fairport
cột vàairports.code
cột. Để tôi phù hợp với tairport
tôi, tôi phải thực hiện một lần tham gia khác vào các trận đấu trước từ lần tham gia đầu tiên.
SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
FROM (SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code
WHERE (airports.code = '?' OR airports.city='?')) AS matches
INNER JOIN airports
ON matches.tairport = airports.code
WHERE (airports.code = '?' OR airports.city = '?')
Truy vấn của tôi trả về kết quả đúng và nó sẽ đủ cho mục đích của bài tập về nhà, nhưng tôi tự hỏi liệu tôi có thể JOIN
trên nhiều cột không? Làm thế nào tôi có thể xây dựng WHERE
mệnh đề sao cho phù hợp với điểm khởi hành và thành phố / mã đích?
Dưới đây là một "truy vấn giả" về những gì tôi muốn đạt được, nhưng tôi không thể nhận được cú pháp chính xác và tôi không biết làm thế nào để thể hiện airports
bảng cho các lần khởi hành và đích đến:
SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code AND flights.tairport = airports.code
WHERE (airports.code = 'departureCode' OR airports.city= 'departureCity')
AND (airports.code = 'destinationCode' OR airports.city = 'destinationCity')
Cập nhật
Tôi cũng thấy hình ảnh đại diện này của SQL Tham gia báo cáo là rất hữu ích như một hướng dẫn chung về cách xây dựng câu lệnh SQL!