我对通过NOT EXISTS
和带有NULL的LEFT OUTER JOIN
获得的结果感到困惑。
考虑以下两个查询,它们会产生非常不同的结果。请注意,fkMasterPersonID
不是右表(tblInternetMasterPerson
(的外键
查询1
SELECT tl.pkLeadID, tl.fkMasterPersonID
FROM dbo.tblPhoneLead tl
WHERE NOT EXISTS (
SELECT MasterPersonID
FROM dbo.tblInternetMasterPerson
)
以上未返回任何结果
查询2
SELECT tl.pkLeadID, tl.fkMasterPersonID
FROM dbo.tblPhoneLead tl
LEFT JOIN dbo.tblInternetMasterPerson mp
ON tl.fkMasterPersonID = mp.MasterPersonID
WHERE tl.fkMasterPersonID IS null
以上返回237条记录,其中fkMasterPersonID
都为NULL。
通过NOT EXISTS
确定fkMasterPersonID
是否不存在于dbo.tblInternetMasterPerson
上的正确方法是什么?此表确实有列pkMasterPersonID
,但它是自动递增的,并且不是任何其他表的外键。
您需要将存在的子查询与外部查询关联起来。这里有一种方法:
SELECT tl.pkLeadID, tl.fkMasterPersonID
FROM dbo.tblPhoneLead tl
WHERE NOT EXISTS (
SELECT 1
FROM dbo.tblInternetMasterPerson mp
WHERE mp.MasterPersonID = tl.fkMasterPersonID
);