6

2つのテーブルがあり、行の正確なコピーが2番目のテーブルに存在する場合は、最初のテーブルから行を削除する必要があります。

MSSQLサーバーでこれを行う方法の例を誰かが持っていますか?

4

5 に答える 5

9

まあ、ある時点で、すべての列をチェックする必要があります - 参加することもできます...

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(*)が、これは役立つだけです-ハッシュの競合を防ぐために、実際の値を確認する必要があります。

于 2009-02-27T16:22:34.427 に答える
8

SQL Server 2005を使用している場合は、intersectを使用できます。

delete * from table1 intersect select * from table2
于 2009-02-27T16:23:49.477 に答える
1

以下の疑似コードがそれを行うと思います..

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

ただし、Chris の INTERSECT の投稿ははるかにエレガントであり、外部結合基準をすべて書き出す代わりに、将来それを使用します :)

于 2009-02-27T16:23:05.690 に答える
0

DISTINCT クエリを試して、2 つのテーブルを結合します。

asp/php などのスクリプト言語を使用して、出力を一連の挿入ステートメントにフォーマットし、テーブルを再構築して結果の一意のデータにすることができます。

于 2009-02-27T16:23:39.197 に答える