Rumah  >  Artikel  >  pangkalan data  >  讲解mysql如何删除重复数据

讲解mysql如何删除重复数据

藏色散人
藏色散人ke hadapan
2022-01-11 16:02:0610445semak imbas

本篇文章给大家介绍mysql怎么删除重复数据。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

sku对应的重量表,应该一个sku_id 对应唯一 一条重量数据,由于程序错误导致出现一样的冗余数据。只保留一条,其他的删除。

字段 说明
id 自增
sku_id sku_id标识
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的其他数据

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视频教程

Atas ialah kandungan terperinci 讲解mysql如何删除重复数据. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam