2つのテーブルがあり、2番目のテーブルに行のコピーが正確に存在する場合は、最初のテーブルから行を削除する必要があります。2つのテーブルを比較し、SQLの重複行を削除するにはどうすればよいですか?
MSSQLサーバーでこれを行う方法については、どのような例がありますか?
2つのテーブルがあり、2番目のテーブルに行のコピーが正確に存在する場合は、最初のテーブルから行を削除する必要があります。2つのテーブルを比較し、SQLの重複行を削除するにはどうすればよいですか?
MSSQLサーバーでこれを行う方法については、どのような例がありますか?
まあ、いくつかの点で、あなたはすべての列をチェックする必要があるとしている - なども参加するかもしれません...
それを行う必要がありますDELETE a
FROM a -- first table
INNER JOIN b -- second table
ON b.ID = a.ID
AND b.Name = a.Name
AND b.Foo = a.Foo
AND b.Bar = a.Bar
...これがCHECKSUM(*)
でもあるが、 のみがに役立ちます。実際の値をチェックして、ハッシュ衝突を防止する必要があります。
私はクリスのINTERSECTポストはしかしはるかにエレガントであると私は将来的には代わりの外部結合の基準のすべてを書き出すことを使用します
DELETE FirstTable, SecondTable
FROM FirstTable
FULL OUTER JOIN SecondTable
ON FirstTable.Field1 = SecondTable.Field1
... continue for all fields
WHERE FirstTable.Field1 IS NOT NULL
AND SecondTable.Field1 IS NOT NULL
...以下の擬似コードは、それを行うだろうと思います:)
私はDISTINCTクエリを試み、2つのテーブルの和集合を作成します。
asp/phpのようなスクリプト言語を使用して、一連の挿入ステートメントに出力をフォーマットし、結果のユニークデータを再構築することができます。
あなたはSQL Server 2005を使用している場合は、intersectを使用することができます。
delete * from table1 intersect select * from table2
はこれを試してみてください。
DELETE t1 FROM t1 INNER JOIN t2 ON t1.name = t2.name WHERE t1.id = t2.id
これがある限り、列のどれもヌルを含まないようにうまく動作します。それが起こるとすぐに、null可能な列ごとに(a.Name = b.Name OR(a.Name IS NULLとb.Name IS NULL))のような複雑な条件を混乱させる必要があります。 nullを避ける別の理由。 –
@Marc Gravell、テーブル 'a'とテーブル' b'が 'view'にあります。次に、重複した行を削除して元の状態にしておくことはできますか?私はそのようなページに[http://stackoverflow.com/questions/32065340/sql-server-2008-r2-delete-duplicate-rows-from-tables-containing-in-view/32065972?noredirect=1#comment52032907_32065972]を掲載しました状況。 – MAK
これらの操作のINTERSECTとEXCEPT(他の回答を参照)を使用すると、NULLの問題を回避できます。http://sqlblog.com/blogs/paul_white/archive/2011/06/22/undocumented-query-plans-equality-comparisons.aspx – ryascl