在相关子查询上使用IN运算符

时间:2016-01-12 09:53:54

标签: sql correlated-subquery

在以下两个表中考虑以下查询:

SELECT sid FROM Salesman SM WHERE sid IN(SELECT sid FROM Sale S WHERE s.sid<>sm.sid)

销售表

SALEID  SID SLDATE
1001    1   01-Jan-14
1006    1   01-Jun-15
1003    4   01-Feb-14
1002    5   02-Jan-14
1005    2   01-Feb-14
1004    1   01-Mar-14

推销员表

SID SNAME   LOCATION
1   Peter   London
2   Michael Paris
3   John    Mumbai
5   Kevin   London
4   Harry   Chicago
6   Alex    Chicago

为什么它没有取得任何结果?

例如:在外部查询的第一次迭代中,内部查询应该返回2,4,5。但似乎没有。为什么呢?

PS:请忽略此类查询的实际用法。这是出于学术目的。

1 个答案:

答案 0 :(得分:1)

因为在这种情况下不可能取任何东西,所以我不明白你想要做什么。 正如我所看到的那样,你要么选择所有没有销售的帆船,那么这是正确的查询:

select sid from Salesman SM where sid not in (select sid from Sale S)

或者您只想要销售的销售人员,在这种情况下,这是正确的查询:

select sid from Salesman SM where sid in (select sid from Sale S)