mysql重複データを削除レコードは1つのみ保持


mysqlから重複データを検索するsqlは簡単です.フィールドをグループ化し、1より大きい結果を統計する必要があります.
SELECT fieldName,COUNT(*) FROM tableName GROUP BY fieldName HAVING COUNT(*) > 1

しかし、重複するデータを検索するだけでなく、削除する必要があります.最小(または最大)idの1つを保持する必要があります.sqlは次のようになります.
DELETE
FROM tableName
WHERE fieldName IN 
    (SELECT * FROM 
        (SELECT fieldName FROM tableName GROUP BY fieldName HAVING COUNT(*) > 1) 
    a )
AND id NOT IN 
    (SELECT * FROM 
        (SELECT MIN(id) FROM tableName GROUP BY fieldName HAVING COUNT(*) > 1)
    b );

注意点:
1.重複データを検索したsqlの外にselect*fromを包んでから操作しなければなりません.そうしないと、エラーが発生します.1093-You can't specify target table'env'for update in FROM clause
2.a/bテーブル別名を追加しないとエラーが発生します:Every derived table must have its own alias