SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN
(Select user_id FROM dbo.vw_alerts WHERE alertID=1)
我试图返回未读取特定警报的检查器列表,user_id是公共字段,该语句的逻辑似乎正常工作,但没有结果回。尽管如果单独运行,子查询确实会返回结果。我哪里错了?选择不在子查询中的结果
SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN
(Select user_id FROM dbo.vw_alerts WHERE alertID=1)
我试图返回未读取特定警报的检查器列表,user_id是公共字段,该语句的逻辑似乎正常工作,但没有结果回。尽管如果单独运行,子查询确实会返回结果。我哪里错了?选择不在子查询中的结果
如果你想使用NOT IN
,那么你应该只包括不空,因为not in
处理值null
值是不同的:
SELECT *
FROM dbo.tbl_inspectors
WHERE user_id NOT IN (Select user_id
FROM dbo.vw_alerts
WHERE alertID=1
AND user_id is not null)
+1尼斯文章 – 2013-02-28 11:19:27
非常感谢,简单的解决方案,并增加我的理解,欢呼声 – 2013-02-28 11:22:51
@DuncanCook欢迎你,这篇文章是一个很好的参考,它是由一个StackOverflow成员。 :) – Taryn 2013-02-28 11:23:47
但子查询的结果是那些你不不想要。因此,如果子查询返回所有用户,那么您的查询将不会返回任何结果。你确定它应该返回行 - 有没有响应警报的用户。
是的,即使每个人都读过警报,仍然有用户(存档,非活动等)没有阅读它,上面的答案解决了它。 – 2013-02-28 11:22:18
检查您的数据,是否有任何检查员实际上没有阅读特定警报? – 2013-02-28 11:16:54
我是一个亲戚navb拉维,但不是那么糟糕:D – 2013-02-28 12:48:51