NOT EXISTS Vs. Left Outer Join



我对通过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
);

最新更新