Ada satu gotcha terkenal untuk not in
. Pada dasarnya, id not in (1,2,3)
adalah singkatan dari:
id <> 1 and id <> 2 and id <> 3
Sekarang jika TimeEntries
your Anda tabel berisi baris apa pun dengan TaskID
dari null
, not in
diterjemahkan menjadi:
ID <> null and ID <> 1 and ID <> 2 AND ...
Hasil perbandingan dengan null
selalu unknown
. Karena unknown
tidak benar dalam SQL, where
klausa menyaring semua baris, dan Anda akhirnya tidak menghapus apa pun.
Perbaikan yang mudah adalah klausa where tambahan dalam subquery:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)