2011-11-01 104 views
3

如果我用以下方式編寫NOT查詢,它們之間有什麼區別?如何在Where子句中使用NOT?

SELECT iBatchID,COUNT(*) FROM #temp WHERE NOT iBatchID IN (1) GROUP BY iBatchID 

SELECT iBatchID,COUNT(*) FROM #temp WHERE iBatchID NOT IN (1) GROUP BY iBatchID 

就是在我使用WHERE NOT iBatchID IN (1)WHERE iBatchID NOT IN (1)如果有什麼區別?

+1

檢查執行計劃以查看是否有差異。 –

+2

從我的理解來說,它與「!(5 == 3)」和「5!= 3」沒什麼區別。他們都評估相同的事情。除了後者更好地傳達你的目的。 –

+1

根據您的索引,我認爲編譯器可以選擇不同的路徑,但我只是針對兩個簡單的表運行測試,併爲兩種方法獲得了相同的執行計劃。 –

回答

3

沒有區別。他們將有相同的查詢結果。

我相信執行計劃應該是相同的,但找到這個的最好方法是捕獲每個查詢的實際執行計劃。

我個人總是選擇... WHERE SomeCol NOT IN (...),因爲它比... NOT WHERE SomeCol IN (...)清晰一點。但這都是個人偏好,你覺得更易讀易維護。

+0

@VikrantMore沒問題,很高興幫助:) – 2011-11-01 19:18:54