私は宿題プロジェクトに取り組んでいて、都市名または空港コードのいずれかでフライトを検索するデータベースクエリを実行することになっていますが、flights
テーブルには空港コードのみが含まれているため、都市で検索するには、airports
テーブルに参加します。
空港のテーブルには、次の列があります。code, city
フライトテーブルには、次の列があります。airline, flt_no, fairport, tairport, depart, arrive, fare
列をfairport
してtairport
いるからとする空港コード。
列depart
とarrive
は、出発日と到着日です。
fairport
列と列のフライトを最初に結合するクエリを考え出しましたairports.code
。私が一致するためtairport
には、最初の結合からの以前の一致に対して別の結合を実行する必要があります。
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 = '?')
私のクエリは適切な結果を返し、宿題の目的には十分ですがJOIN
、複数の列でできるかどうか疑問に思っていますか?WHERE
出発地と目的地の都市/コードに一致するように句をどのように作成しますか?
以下は、私が達成したいことについての「疑似クエリ」ですが、構文を正しく取得できずairports
、出発地と目的地のテーブルを表す方法がわかりません。
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')
更新
また、SQL結合ステートメントのこの視覚的な表現は、SQLステートメントの作成方法に関する一般的なガイドとして非常に役立つことがわかりました。