どのように私は左のMySQLと同じ列に二回参加使うのですか?

StackOverflow https://stackoverflow.com/questions/966782

  •  12-09-2019
  •  | 
  •  

質問

私は2つのテーブル、空港用とルートの1を持っています。

空港は少しこのようになります。

Airports
-------------------------------------
id | code | name                    |
-------------------------------------
01 | LGW  | London Gatwick          |
-------------------------------------
02 | LHR  | London Gatwick          |

など...

このようなルートのための別の

Routes
---------------------------
id | ORIGIN | DESTINATION |
---------------------------
01 | LGW    | VCE         |
---------------------------
02 | TSF    | LHR         |

のように...

私はテーブルからのルートを選択する必要がありますが、私も同様に、空港名を取得したいです。混乱のビットは、私が二回空港コードを照会する必要があるということです。私はこのような何かをしようとしている。

SELECT routes.*, airports.name as origin_name FROM routes
LEFT JOIN airports ON airports.IATA = routes.origin
LEFT JOIN airports ON airports.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'

あなたが知っているか、してもしなくてもよい、動作しません。どのように私はこれをやって行くのでしょうか?

役に立ちましたか?

解決

エイリアスを使用します:

SELECT
    routes.*,
    a1.name AS origin_name,
    a2.name AS destination_name
FROM routes r
LEFT JOIN airports a1 ON a1.IATA = r.origin
LEFT JOIN airports a2 ON a1.IATA = r.destination
WHERE
    r.origin = 'LHR' AND r.destination = 'VCE' OR r.origin = 'VCE'

他のヒント

ただ、テーブルに二つの異なる別名を与えます。 (未テスト)のようなもの;

SELECT routes.*, o.name as origin, d.name as destination FROM routes
LEFT JOIN airports o ON o.IATA = routes.origin
LEFT JOIN airports d ON d.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'

あなたは別名を使用して二回AIRPORTSテーブルを追加する必要が....

SELECT ORIGIN_AIRPORT.NAME,
       DESTINATION_AIRPORT.NAME
FROM   AIRPORTS ORIGIN_AIRPORT,
       AIRPORTS DESTINATION_AIRPORT,
       ROUTES
WHERE  ROUTES.ORIGIN = ORIGIN_AIRPORT.CODE
AND    ROUTES.DESTINATION = DESTINATION_AIRPORT.CODE;

テーブル名にエイリアスを置きます:

SELECT routes.*, a1.name as origin_name FROM routes
LEFT JOIN airports AS a1 ON a1.IATA = routes.origin
LEFT JOIN airports AS a2 ON a2.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top