複数の列でINNER JOINを実行する方法 質問する

複数の列でINNER JOINを実行する方法 質問する

私は宿題プロジェクトに取り組んでおり、都市名または空港コードでフライトを検索するデータベースクエリを実行することになっていますが、flightsテーブルには空港コードしか含まれていないため、都市で検索したい場合はテーブルを結合する必要がありますairports

空港テーブルには以下の列があります:code, city
フライトテーブルには以下の列があります:airline, flt_no, fairport, tairport, depart, arrive, fare
fairporttairportからそして空港コード。
列は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 Join文の視覚的表現することがとてもSQL ステートメントの構築方法に関する一般的なガイドとして役立ちます。

ベストアンサー1

結合するテーブルにエイリアス次の例のように:

SELECT 
    airline, flt_no, fairport, tairport, depart, arrive, fare
FROM 
    flights
INNER JOIN 
    airports from_port ON (from_port.code = flights.fairport)
INNER JOIN
    airports to_port ON (to_port.code = flights.tairport)
WHERE 
    from_port.code = '?' OR to_port.code = '?' OR airports.city='?'

to_portおよび は、テーブルfrom_portの最初のコピーと 2 番目のコピーの別名であることに注意してくださいairports

おすすめ記事