0
SELECT * 
FROM dbo.tbl_inspectors 
WHERE user_id NOT IN 
(Select user_id FROM dbo.vw_alerts WHERE alertID=1)

我试图返回尚未读取特定警报的检查员列表,user_id 是公共字段,该语句的逻辑似乎有效,但没有返回任何结果。尽管如果单独运行子查询确实会返回结果。

4

2 回答 2

4

如果你想使用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)

请参阅NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL:SQL Server

于 2013-02-28T11:15:47.873 回答
0

但是子查询结果是您不想要的。因此,如果子查询返回所有用户,那么您的查询将不会返回任何结果。您确定它应该返回行吗?有些用户没有响应警报。

于 2013-02-28T11:19:28.410 回答