不存在与INNER JOIN没有返回预期结果

问题描述:

我有临时表#Inserts在那里我收集记录,最终我会在某些时候执行INSERT。在这之前我需要过滤掉一些数据。第一个查询使用NOT EXISTS,它不会返回正确的结果:不存在与INNER JOIN没有返回预期结果

SELECT I.UnitId 
    FROM #Inserts AS I 
    WHERE NOT EXISTS (
    SELECT 1 
    from #Inserts AS INS 
    INNER JOIN Organisation AS O 
     ON INS.OrganisationId = O.OrganisationId 
     AND INS.UnitId = O.UnitId 
    ) 

但是,如果做到以下几点:

DELETE INS FROM #Inserts AS INS 
    INNER JOIN Organisation AS O 
     ON INS.OrganisationId = O.OrganisationId 
     AND INS.UnitId = O.UnitId 

那么如果我SELECT * FROM #Inserts我可以看到记录被过滤为我已经预料到了。我在做什么错了NOT EXISTS,我怎样才能得到与DELETE相同的行为?

我相信你打算在相关子查询:

SELECT I.UnitId 
FROM #Inserts I 
WHERE NOT EXISTS (SELECT 1 
        FROM Organisation AS O 
        WHERE I.OrganisationId = O.OrganisationId AND I.UnitId = O.UnitId 
       ); 

你的版本正在运行一个独立的子查询。如果有任何行被返回,则NOT EXISTS返回false。

+0

Yeap,看来这正是我所需要的。谢谢! – Leron