mysql が重複データを削除する方法を説明する

藏色散人
リリース: 2022-01-23 09:17:30
転載
10530 人が閲覧しました

この記事では、MySQL で重複データを削除する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

SKU に対応する対応する重みテーブルは、SKU_ID に対応する唯一の重みデータに対応する必要があります。これにより、プログラム エラーにより同じ冗長データが発生します。 1 つだけを保持し、他は削除します。

#フィールド説明##idsku_idweightテーブル名を仮定します:
増分
sku_idID
Weight
weight


重複データを含むリストをクエリします

SELECT sku_id,COUNT(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1
ログイン後にコピー

最小値ごとに重複をクエリしますデータ内の ID

SELECT min(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1
ログイン後にコピー

重複データを削除する最小の ID を持つ他のデータをクエリします

SELECT id,sku_id FROM weight WHERE sku_id IN(
    SELECT sku_id FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN(
    SELECT MIN(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)
ログイン後にコピー

削除する最小の ID を持つ他のデータを削除します重複データ Data

DELETE FROM weight WHERE sku_id IN(
    SELECT sku_id FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN(
    SELECT MIN(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)
ログイン後にコピー
理由は次のとおりです。このテーブルの削除中に、このテーブルは同時にクエリされ、このテーブルはクエリと削除も同時に行われます。これはデッドロックとして理解できます。 。 Mysql は、同じテーブルの削除とクエリのこの操作をサポートしていません

错误代码: 1093You can't specify target table 'weight' for update in FROM clause
ログイン後にコピー

解決策は次のとおりです。削除するデータをサードパーティのテーブルとしてクエリし、フィルタリングして削除します。

DELETE FROM `weight` WHERE sku_id IN(
    SELECT sku_id FROM (SELECT sku_id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table1)AND id NOT IN (
    SELECT id FROM (SELECT MIN(id) AS id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table2)
ログイン後にコピー

アップデートも上記と同じ原理で動作します。

推奨学習: 「

mysql ビデオ チュートリアル

以上がmysql が重複データを削除する方法を説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート