我想清理一個表中有相當多的孤兒項目。刪除表中的孤兒
我正在通過查找空值來檢查是否存在與另一個表的關係。
DELETE FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL
我得到一個錯誤,左外連接無效。
我要尋找其他的方式,我可以從這個破碎的關係刪除這些孤兒
我想清理一個表中有相當多的孤兒項目。刪除表中的孤兒
我正在通過查找空值來檢查是否存在與另一個表的關係。
DELETE FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL
我得到一個錯誤,左外連接無效。
我要尋找其他的方式,我可以從這個破碎的關係刪除這些孤兒
試試這個建議:
DELETE FROM table1
WHERE NOT EXISTS (SELECT NULL FROM table2 WHERE table1.ID = table2.ID)
如果你想使用相同的語法,這裏是它如何能已經:
DELETE a
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id
WHERE b.id IS NULL
我不明白爲什麼,但這比@MaziarTaheriAbkenar解決方案跑得快得多。 SQL Server中的查詢計劃與您的查詢計劃略有不同,但您的運行速度在我的世界中要快得多。 +1 –
@Smitty奇怪,我會認爲這是一樣的 –
這是做到這一點的方法。子查詢是這項工作的錯誤工具。 – Teson
表1應該是包含孤兒記錄的子表。和表2的父表。
DELETE ChildTable
FROM Table1 ChildTable
LEFT JOIN Table2 ParentTable
ON ChildTable.id = ParentTable.id
WHERE ParentTable.id IS NULL
一個非常有幫助的文章。 SQL JOINs make it easy to find and fix missing data
+1:你是第一個 –