2014-06-10 33 views
0

我有一個大致如下兩個表:SQL連接上最大值,哪怕是0

Airports 
uniqueID | Name 
0001  | Dallas 


Runways 
uniqueID | AirportID | Length 
000101 | 0001  | 8000 

我在做一個連接,看起來像這樣:

SELECT Airports.Name, Runways.Length FROM Airports, Runways 
WHERE Airports.uniqueID==Runways.AirportID 

顯然,每條跑道只有一個機場,每個機場有1..n條跑道。

對於有多條跑道的機場,這給了我幾行,每個跑道在那個機場都有一排。 我想要一個只包含最長跑道的行的結果集,即MAX(長度)。 有時,數據庫中幾條跑道的長度爲0,因爲源數據丟失。在那種情況下,我只想要一個長度= 0的行顯然。

我試過這裏列出的方法:Inner Join table with respect to a maximum value但這實際上沒有幫助,因爲這就像尋找所有最長的跑道,而不是在一個特定機場最長的跑道。

+0

當幾個長度爲0時,用於確定跑道返回的標準是什麼? (airportID最小的airportID?) – xQbert

+0

@xQbert它可以是隨機的。如果它們存儲在長度爲0的數據庫中,我不在乎。只需選擇一個。 – Philipp

回答

1

這似乎簡單,是你想要的,但它似乎滿足你所描述的所有情況......

SELECT A.Name, Max(R.Length) 
FROM Airports A 
INNER JOIN Runways R 
on A.uniqueID=R.AirportID 
Group by A.Name 

這應該給你的每個機場的跑道最大。

如果您需要其他數據元素,則使用上述內聯視圖(聯接內的子查詢)將結果集限制爲僅限那些機場及其最大跑道。

+0

不,就是這樣。如果它看起來「太簡單」,那是因爲自2005年以來我沒有做過任何SQL,所以我甚至忘記了最簡單的事情。 – Philipp