ホームページ  >  記事  >  バックエンド開発  >  MySQL はデータの重複排除を実装します

MySQL はデータの重複排除を実装します

小云云
小云云オリジナル
2018-03-28 13:59:241948ブラウズ

この記事では主に、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 を保持します

重複データの SQL ステートメントを削除します

My SQLは重複したデータ行を削除して保存しますたった一つ

以上がMySQL はデータの重複排除を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。