1

申し訳ありませんが、私のタイトルが紛らわしいことに気づきました。説明させてください。

次のようなデータベースがあります。

| i | a | b |
| 1 | 5 | 8 |
| 2 | 3 | 3 |
| 3 | 3 | 6 |
| 4 | 5 | 8 |
| 5 | 1 | 1 |
| 6 | 3 | 3 |

iは ID で、とab他の 2 つのフィールドです。上記のように、ID 2 と ID 6 の両方にa = 3と がありb = 3ます。同じことが ID 1 と ID 4 にも当てはまり、どちらも が 5 でa、 が 8 ですb。ID 番号は異なりますが、これらの行は重複していると考えており、1 つを除いてすべて削除したいと考えています。ID 番号はギャップを補うために変更する必要はありません (しかし、私はそれに反対しません)。

上記の例を次のようにするクエリがあれば幸いです。

| i | a | b |          | i | a | b |
| 3 | 3 | 6 |          | 1 | 5 | 8 |
| 4 | 5 | 8 |    or    | 2 | 3 | 3 |
| 5 | 1 | 1 |          | 3 | 3 | 6 |
| 6 | 3 | 3 |          | 5 | 1 | 1 |

詳細についてはお気軽にお問い合わせください。事前に感謝します。

4

3 に答える 3

3
delete from your_table
where i not in 
(
    select * from 
    (
      select min(i)
      from your_table
      group by a, b 
    ) x
)

MySQL は、選択しているテーブルから削除できません。そのため、選択のサブクエリを作成しましたselect * from () x

于 2012-08-08T19:12:28.033 に答える
2

初めに。テーブルをクリーンアップした後、列aとbに代替キーインデックスを配置して、テーブルに重複レコードが追加されないようにします...しかし、そうは言っても、最後に入力された重複を削除するには、する必要があります

 Delete TableName
 From Tablename t
 Where id <> (Select Min(id) From TableName
             Where a = t.a and b = t.b)

最後に入力した重複を除くすべてを削除するには、最小値を最大値に変更します

于 2012-08-08T19:14:01.950 に答える
1

いくつかのシナリオ (pk を使用するかどうか、1 つのエントリを残すなど) のソリューションを提供するため、このアプローチが気に入っています。

http://www.4guysfromrolla.com/webtech/sqlguru/q051200-2.shtml

于 2012-08-08T19:14:23.457 に答える