2011-07-03 22 views
4

孤立したアイテムがかなりあるテーブルをクリーンアップしようとしています。テーブルから孤児を削除する

これは、null値を検索して別のテーブルとの関係があるかどうかを確認することでこれに近づいています。

DELETE FROM table1 
LEFT JOIN table2 ON table1.ID = table2.ID 
    WHERE table2.ID IS NULL 

左外部結合が無効であるというエラーが発生します。

私は

答えて

10

これを試してみてください、私はこの壊れた関係からこれらの孤児を削除することができ、他の方法の提案を探していますが:

ここ
DELETE FROM  table1 
WHERE NOT EXISTS (SELECT NULL FROM table2 WHERE table1.ID = table2.ID) 
+1

+1:あなたは最初です –

17

あなたは同じ構文を使用したい場合は、どのようにそれは可能性があります

DELETE a 
FROM table1 a 
LEFT JOIN table2 b 
ON a.id = b.id 
WHERE b.id IS NULL 
+0

なぜこれは@MaziarTaheriAbkenarソリューションよりも速く実行されます。 SQL Serverのクエリプランは、あなたと彼の間で少し異なりますが、あなたの実行は私の世界ではるかに速くなります。 +1 –

+0

@Smitty odd、私はそれが同じだと思ったでしょう –

+2

これはそれを行う方法です。サブクエリはこのジョブの間違ったツールです。 – Teson

0

表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

関連する問題