2

我有一个名为 train 的表,其中包含列号、到达站、出发站

我已经填充了这个并且想找到只为爱丁堡服务的火车(即所有从车站出发的火车只到达爱丁堡)我想使用嵌套查询并使用不存在运算符。

到目前为止我已经尝试过..

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

5 回答 5

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
        );
于 2013-05-02T15:40:29.150 回答
1

为什么需要使用exists运算符?当然 OR 就足够了:

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

?

于 2013-05-02T15:36:36.980 回答
0

如果我正确理解您的问题,您只对到达爱丁堡的任何火车路线感兴趣。所以只需这样做:

SELECT * FROM train WHERE arrive_station = "Edinburgh"

将此与创建其他路由表的“不存在”表达式结合起来是多余的;只是放下那部分。

于 2013-05-02T15:43:24.500 回答
0

尝试,

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

检查这个 SQLFiddle

于 2013-05-02T15:56:04.463 回答
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

但是我面临一个逻辑,这也解决了我的问题。我的问题有点不同,但无论如何,这确实提供了一个信号。

于 2017-07-28T19:44:41.483 回答