Có một gotcha khét tiếng cho not in
. Về cơ bản, id not in (1,2,3)
là viết tắt của:
id <> 1 and id <> 2 and id <> 3
Bây giờ nếu TimeEntries
của bạn bảng chứa bất kỳ hàng nào có TaskID
trong tổng số null
, not in
dịch sang:
ID <> null and ID <> 1 and ID <> 2 AND ...
Kết quả so sánh với null
luôn unknown
. Vì unknown
không đúng trong SQL, where
mệnh đề lọc ra tất cả các hàng và bạn sẽ không xóa được gì.
Cách khắc phục dễ dàng là bổ sung mệnh đề where trong truy vấn con:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)