首页 > 解决方案 > 如果 JOINED 值为空,则 LEFT Join 不会从主表中提取记录

问题描述

假设我有一个如下所示的 tableA:

 ID         Name         IssueID
 1          Bob          2
 2          John         Null

我有一个名为 tblRef 的参考表,其中包括以下列:

 IssueID       IssueDesc
 2             Not Completed
 3             Completed

我的查询看起来像这样,

Select a.Id,a.Name, I.IssueDesc from tableA a Left Join tblRef I on a.issueId = 
I.IssueDesc where IssueID not in (2)

如果我这样做,我看不到 tableA 中 IssueID 为 NULL 的记录,有没有办法把它拉起来?或者更确切地说,为什么它不提高记录?

标签: sqlssms

解决方案


NULL“失败”几乎所有的比较。实际发生的是结果是NULL,并且行被过滤掉了。

在 SQL Server 中,您需要对此进行显式测试:

where IssueID not in (2) OR IssueID is null

请记住,它的语义NULL通常意味着“未知”值而不是“缺失”值。当你有NULL not in (2)时,语义是“不在(2)中”。结果是“未知”,因为值可能是 2。


推荐阅读