不存在与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。
Yeap,看来这正是我所需要的。谢谢! – Leron