2012-04-04 94 views
0

我的模式是如下的相關名稱:獲得兩個相同類型的數據庫列

  • airports表保存機場名稱。它的主鍵是一個整數,id
  • flights表中包含航班數據。它有兩個外鍵,departure_airport_idarrival_airport_id

我試圖讓二者在飛行departure-和到達機場的名字。現在我的SQL如下:

SELECT name AS departure_airport, name AS arrival_airport FROM flights, airports WHERE departure_airport_id = airports.id OR arrival_airport_id = airports.id 

我可以看到這是模糊的,因爲數據庫無法知道由departure_airport我的意思是departure_airport_id的名稱和arrival_airport我的意思是「arrival_airport_id」的名字,但是在航班記錄中獲取兩個機場名稱的正確方法是什麼?

回答

2

從航班JOIN兩次到機場表,就像這樣:

SELECT dep.name AS departure_airport, arr.name AS arrival_airport 
FROM flights f 
    JOIN airports dep ON f.departure_airport_id = dep.id 
    JOIN airports arr ON f.arrival_airport_id = arr.id 
+0

非常好,就是這樣。謝謝! – Laurens 2012-04-04 10:38:53

1
SELECT departure_airport.name AS departure_airport, 
      arrival_airport.name AS arrival_airport 
     FROM flights 
INNER JOIN airports departure_airport 
     ON departure_airport.id = flights.departure_airport_id 
INNER JOIN airports arrival_airport 
     ON arrival_airport.id = flights.arrival_airport_id 

有連結到表沒有問題不止一次,如果你使用一個不同的別名。

1
SELECT depart.name AS departure_airport, arr.name AS arrival_airport 
FROM flights, airports arr,airports depart 
WHERE departure_airport_id = depart.id and 
arrival_airport_id = arr.id