2017-01-23 60 views
0

我有臨時表#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相同的行爲?

回答

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。

+0

Yeap,看來這正是我所需要的。謝謝! – Leron