不存在与。左外连接

NOT EXISTS Vs. Left Outer Join

我对通过 NOT EXISTSLEFT OUTER JOIN 和 NULL 获得的结果感到困惑。

考虑以下两个产生截然不同结果的查询。请注意 fkMasterPersonID 不是右边的外键 table (tblInternetMasterPerson)

查询 1

SELECT tl.pkLeadID, tl.fkMasterPersonID
FROM dbo.tblPhoneLead tl
WHERE NOT EXISTS (
    SELECT MasterPersonID
    FROM dbo.tblInternetMasterPerson
)

以上returns无结果

查询 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

以上returns237条记录fkMasterPersonID全部为NULL

通过 NOT EXISTS 确定 fkMasterPersonID 是否不存在于 dbo.tblInternetMasterPerson 上的正确方法是什么?这个 table 确实有列 pkMasterPersonID 但它是自动递增的并且不是任何其他 table.

的外键

您需要将存在的子查询关联到外部查询。这是一种方法:

SELECT tl.pkLeadID, tl.fkMasterPersonID
FROM dbo.tblPhoneLead tl
WHERE NOT EXISTS (
    SELECT 1
    FROM dbo.tblInternetMasterPerson mp
    WHERE mp.MasterPersonID = tl.fkMasterPersonID
);