私は宿題プロジェクトに取り組んでおり、都市名または空港コードでフライトを検索するデータベースクエリを実行することになっていますが、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 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
。