本篇文章给大家介绍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的其他数据
DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分
648
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号