我哪里错了?选择ä¸åœ¨å­æŸ¥è¯¢ä¸­çš„结果

时间:2013-02-28 11:09:57

标签: sql sql-server

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

我试图返回一个没有读å–特定警报的检查员列表,user_id是公共字段,该语å¥çš„逻辑似乎有效,但没有返回任何结果。虽然å­æŸ¥è¯¢ç¡®å®žä¼šåœ¨å•ç‹¬è¿è¡Œæ—¶è¿”回结果。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

但å­æŸ¥è¯¢ç»“果是你ä¸æƒ³è¦çš„结果。因此,如果å­æŸ¥è¯¢è¿”回所有用户,那么您的查询将ä¸ä¼šè¿”回任何结果。你确定它应该返回行 - 有些用户没有å“应警报。