ホームページ >データベース >mysql チュートリアル >mysql が重複データを削除する方法を説明する

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

藏色散人
藏色散人転載
2022-01-11 16:02:0610573ブラウズ

この記事では、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 までご連絡ください。