1. ホーム
  2. sql

[解決済み] 複数のカラムに対してINNER JOINを行う方法

2022-03-07 14:52:37

質問

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

airportsテーブルには、以下のカラムがあります。 code, city
フライトテーブルには、以下のカラムがあります。 airline, flt_no, fairport, tairport, depart, arrive, fare
カラムは fairporttairport から 空港コード
コラム departarrive は出発日と到着日です。

このクエリでは、まずフライトを fairport カラムと airports.code カラムを使用します。 を一致させるために tairport 最初の結合で一致したものについて、もう1度結合を実行する必要があります。

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文の組み立て方の一般的なガイドとして役立ちます!

どのように解決するのですか?

同じテーブルで複数回JOINする場合は、結合するテーブルに エイリアス 次の例のように。

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_portfrom_port は、1番目と2番目のコピーのエイリアスです。 airports テーブルを作成します。