not in
の悪名高い落とし穴が 1 つあります。 .基本的に、id not in (1,2,3)
は次の省略形です:
id <> 1 and id <> 2 and id <> 3
プレ>
TimeEntries
の場合 テーブルにはTaskID
を持つ任意の行が含まれますnull
の 、not in
に変換:ID <> null and ID <> 1 and ID <> 2 AND ...
プレ>
null
との比較結果 常にunknown
です .unknown
以来where
は SQL では真ではありません。 節を使用すると、すべての行が除外され、何も削除されなくなります。簡単な修正は、サブクエリに where 句を追加することです:
DELETE FROM Tasks WHERE ID not IN ( SELECT TaskID FROM TimeEntries WHERE TaskID is not null )
プレ>