2009-06-08 9 views
2

私は空港用とルート用の2つのテーブルを持っています。MySQLで同じ列にLeft Joinを2回使用するにはどうすればよいですか?

空港少しこの

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

のように見え、この

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

のように...

ようなルートのように....

と別

私はテーブルからルートを選択する必要がありますが、空港名も取得したいと考えています。混乱していることは、私が空港コードを2度問い合わせる必要があることです。私はこのようなことをしようとしています

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' 

あなたが知っているかもしれないし、わからない、うまくいかない。これをどうやってやりますか?

答えて

14

使用エイリアス:

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' 
+0

あなたがどのように知っているかを簡単に;-)ありがとうございます! – gargantuan

4

テーブルに2種類の別名を付けてください。何か(テストされていない);

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' 
3

あなたが二回エイリアスを使用して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; 
+1

Eh。 Caps Lock Dayは別の日付です;)http://ja.wikipedia.org/wiki/Caps_lock#International_Caps_Lock_Day –

2

テーブル名にエイリアスを置く:

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' 
関連する問題