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 )プレ>