テーブルから重複レコードを削除する必要があります。構文: T-SQL (MS SQL Server)
それには2つの困難があります:
- 行比較に影響を与えてはならないデータを含むフィールドがあります
- 「1対多」の関係を持つ最初のテーブルにリンクされた追加のテーブルがあります
例:
Table A Table B
-------------- --------------
AId - int <-\ BId - int
A1 - int \-> AId - int
A2 - varchar B6 - varchar
A3 - varchar B7 - varchar
A4 - varchar B8 - varchar
A5 - int B9 - int
したがって、テーブル A のレコードには、フィールド AId、A1、A2、A3、A4、および A5 と、「サブレコード」のリストが含まれます。これは、B.AId が A.AId と一致するテーブル B のレコードのリストです。たとえば、テーブル A には日付/時刻やクライアント ID などのトランザクションのプロパティが含まれ、テーブル B は価格と金額を含む商品のリストを表すことができる、購入トランザクションのリストにすることができます。
レコードの一部が複製されたら。それらは、異なる AId、異なる BId、異なる A4、A5、B8、および B9 を持っています。2 つのレコードを重複させるには、他のすべてのフィールドが一致する必要があります。
したがって、A からの 2 つのレコード X および Y は、次の場合に重複していると見なされます。
- X.A1 == Y.A1
- X.A2 == Y.A2
- AId == X.AId を持つテーブル B のすべてのレコードは、AID == Y.AId を持つ B のすべてのレコードと完全に一致しますが、B8 フィールドと B9 フィールドは除外されます (無視されます)。
少なくともそのような重複レコードの AID を取得する必要があります。せいぜいこれらの重複レコードを削除しますが、レコードのコピーを 1 つだけ残します (どちらでもかまいません)。
次の説明が必要かどうか教えてください。前もって感謝します。
upd: SQL フィドル: http://sqlfiddle.com/#!3/898c8/1