mysql重複データを削除レコードは1つのみ保持
mysqlから重複データを検索するsqlは簡単です.フィールドをグループ化し、1より大きい結果を統計する必要があります.
しかし、重複するデータを検索するだけでなく、削除する必要があります.最小(または最大)idの1つを保持する必要があります.sqlは次のようになります.
注意点:
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
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