この記事では主に、MySQL で重複したデータを削除する方法を説明し、お役に立てれば幸いです。
削除 FROM `ex` WHERE 電話が入っています (SELECT c.phone
FROM `ex` as c
GROUP BY c.phone
HAVING COUNT( * ) >1) と ID が入っていません (select max(b. id) from `ex` as b group by b.phone);
注: ex (テーブル名例) は、phone フィールドに基づいて重複するかどうかを判断します。最後に挿入されたもの (つまり、自動インクリメントされた ID が最も大きいもの) を繰り返し保持します
ただし、実行後の結果は期待どおりではありません:
/* SQL エラー (1093): 指定できませんtarget table 'ex' for update in FROM 句 */
翻訳: 最初に同じテーブル内の特定の値を選択してから、(同じステートメント内で) テーブルを更新 (削除) することはできません。特定のフィールドの値に基づいて判断し、特定のフィールドの値を更新します。
質問はmysqlのみに関するもので、oracle、sqlサーバーなどは含まれません。それは、mysql のサブステートメントのサポートがあまり良くないからです。
問題の解決策:
最初に結果を選択し、次に中間テーブルを通じて再度選択すると、選択の結果は、エイリアス付きのキャッシュされたテーブル、つまり仮想テーブルになります。 。
図に示すように、mysql の 1 つの SQL で重複した情報を削除する問題を解決します。
みんなの便宜のために:
DELETE FROM `ex` WHERE id NOT IN ( SELECT id FROM (SELECT max(b.id) AS id FROM `ex` b GROUP BY b.phone) b);
関連する推奨事項:
Mysql は重複データを削除し、最小の ID を保持します
My SQLは重複したデータ行を削除して保存しますたった一つ
以上がMySQL はデータの重複排除を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。