不存在INNER JOIN而不返回预期结果

时间:2017-01-23 14:48:25

标签: sql sql-server-2008

我有临时表NOT EXISTS,我会收集记录,最终我会在某些时候执行 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我可以看到记录被过滤,因为我已经预料到了。我对{{1}}做错了什么?我怎样才能获得与{{1}}相同的行为?

1 个答案:

答案 0 :(得分:2)

我相信你想要一个相关的子查询:

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。