2

重複の可能性:
MySQLで重複する行を削除します

巨大なテーブルの単一の属性に一意のインデックスを作成したいのですが、重複する値があるため、重複を削除する必要があります。重複レコードのみを削除できます。これを行うためのphpmyadminまたはmysqlクエリの最良の解決策は何ですか?

私が理解した唯一の解決策は、別のテーブルを選択することですが、元のテーブルからデータを削除したいと思います。

テーブルは次のようになります(一意のインデックスを付けたいid

|id|...
+--+---
| 1|x
| 2|a   <-- duplicity
| 2|b   <-- duplicity
| 3|c
| 4|d

これが最良の結果になります

|id|...
+--+---
| 1|x
| 2|a
| 3|c
| 4|d

これも許容できる結果です

|id|...
+--+---
| 1|x
| 3|c
| 4|d
4

3 に答える 3

4
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX (id);
于 2012-10-31T14:34:15.353 に答える
1
DELETE  a 
FROM    tableName a
        LEFT JOIN
            (
                SELECT id, min(colName) x
                FROM tableName
                GROUP BY id
            ) c
        ON a.id = c.id AND
            a.colName = c.x
WHERE c.id IS NULL;
于 2012-10-31T14:31:50.860 に答える
1
DELETE FROM table 
WHERE id IN 
   (SELECT id FROM table, (SELECT id, count(*) dNum FROM table GROUP BY id) x 
     WHERE id = x.id      
   ORDER BY id DESC LIMIT dNum-1)
于 2012-10-31T14:56:32.110 に答える