我的SQL查询NOT EXISTS出错了

时间:2014-05-15 00:32:06

标签: sql sql-server

我一直在看这个并且不明白为什么我没有得到结果集这里是我的查询

SELECT UserID FROM @SelectedID 
SELECT UserID FROM @SelectedIdValue
SELECT UserID FROM @SelectedID WHERE NOT EXISTS (SELECT UserID FROM @SelectedIdValue

这是返回的结果集

enter image description here

如您所见,第二个结果集中不存在194,那么为什么我没有返回194?我在这里使用NOT EXISTS错了吗?

3 个答案:

答案 0 :(得分:4)

您需要一个相关的子查询:

SELECT UserID
FROM @SelectedID si
WHERE NOT EXISTS (SELECT 1
                  FROM @SelectedIdValue siv
                  WHERE si.UserId = siv.UserId
                 );

您的查询版本只是对所有行返回false。子查询返回一个值,因此存在一些东西。

编辑:

如果您愿意,可以将其标记为left outer join

SELECT si.UserID
FROM @SelectedID si LEFT OUTER JOIN
     @SelectedIdValue siv
     ON si.UserId = siv.UserId
WHERE siv.UserId IS NULL;

答案 1 :(得分:0)

exists子查询仅检查用户ID是否存在,而不是它们的值是什么。如果你更换"不存在"使用" UserID不在"您的查询将返回预期的结果。请注意"在"如果列中有空值,则无法按预期工作,请在使用""之前验证是否可以。

答案 2 :(得分:0)

SELECT userid 
FROM   @SelectedID 
WHERE  userid NOT IN (SELECT userid 
                      FROM   @SelectedIdValue)