我有另外一個程序員誰寫了一堆delete語句看起來像這樣的:SQL「中的」與加入進行刪除
DELETE dbo.Test WHERE TestId IN (SELECT TestId FROM #Tests)
(這一個很簡單但也有其他與子和子子在這樣的陳述)
我總是把這些類型的語句寫成連接。在我看來,這就像有一個將被反覆調用的內聯函數。然而,我知道優化器能夠帶來一些嚴重的魔法,而且新事物總是被添加進去。我還沒有研究過Join和In之間的區別,我想我會問,如果它仍然是一個應該加入的東西。
如果您使用「加入」或「中」,這有什麼關係?
如果'in'不是這樣使用的,那麼它是如何使用的?我看不出這種用法有什麼問題 - 有些DBMS甚至不支持在'delete'語句中的連接,那裏沒有替代方法,它們的表現也一樣好。並且:連接不一定代替IN條件,兩種服務器都有不同的用途,並可能返回不同的結果。 –
@a_horse_with_no_name「IN」通常用於與有限值列表一起使用,以與列值進行比較。一般來說,除非實際上有一個有限的列表來反對,否則你希望使用'EXISTS'子句或'JOIN'而不是'IN'。一般來說,這會產生更一致的結果。 –