2013-05-02 73 views
2

我有一個名爲列車表,其中有列數,arrive_station,depart_station離開站只到達愛丁堡) 我想使用嵌套查詢並使用不存在的操作符。SQL嵌套查詢(不存在)

到目前爲止,我已經試過..

SELECT depart_station 
FROM train 
WHERE arrive_station = "edinburgh" 
    AND NOT EXISTS 
    (
    SELECT arrive_station 
    FROM train 
    WHERE arrive_station != "edinburgh" 
); 

回答

1

爲什麼你需要使用exists操作?當然一個OR就足夠了:

select * 
from train 
where depart_station = 'Edinburgh' or arrive_station = 'Edinburgh'; 

+2

他想要避開一條三角形的路線,所以它不會在非愛丁堡的城市之間建立任何連接。在這裏使用'NOT EXISTS'是正確的。 – 2013-05-02 15:37:49

4

您需要將您的嵌套查詢以某種方式與您的外部查詢關聯起來,因此如果number是列車編號,您希望將別名添加到您的表中並添加AND t1.number = t2.number

SELECT depart_station 
FROM train t1 
WHERE arrive_station = "edinburgh" 
AND  NOT EXISTS 
     (
      SELECT arrive_station 
      FROM train t2 
      WHERE t2.arrive_station != "edinburgh" 
      AND  t1.number = t2.number 
     ); 
0

如果我理解你的問題是正確的,那麼你只對到達愛丁堡的任何列車路線感興趣。因此,只要做到這一點:

SELECT * FROM train WHERE arrive_station = "Edinburgh" 

這與「NOT EXISTS」的表達,創造等航線的表,是多餘的結合;只是放棄那部分。

+0

我正在尋找只在愛丁堡運營的出發站,並且沒有其他站點 例如倫敦 - >愛丁堡,倫敦 - >格拉斯哥 然而,昆斯費裏(一個小火車站)只有火車去愛丁堡,而那些是我的我正在寫一個查詢。 – user1787066 2013-05-02 15:51:18

0

嘗試,

SELECT depart_station 
FROM train 
WHERE arrive_station = "edinburgh" 
AND depart_station NOT IN (
    SELECT depart_station 
    FROM train 
    WHERE arrive_station != "edinburgh" 
) 

檢查this SQLFiddle

0
SELECT depart_station 
FROM train t1 
WHERE arrive_station = "edinburgh" 
AND  NOT EXISTS 
     (
      SELECT arrive_station 
      FROM train t2 
      WHERE t2.arrive_station != "edinburgh" 
      AND  t1.number = t2.number 
     ); 

非常驚人的邏輯存在於查詢。它可以解決如下:

select depart_station from train order by depart_station 

但我面臨一個邏輯,這也解決了我的問題。我的問題有點不同,但無論如何,這確實提供了一個信號。