sql查询 找出重复数据,并且只保留一条.

1.(错误操作)查所有的重复数据

很明显下列代码运行速度很慢

select * from 表 t where (select count(*) fromwhere 字段1=t.字段1 AND 字段2=t.字段2)>1 

所以我们使用下面的分组

1.(速度优化) 查所有的重复数据

SELECT * 
FROMWHERE (字段1, 字段2, 字段3) IN (SELECT 字段1, 字段2, 字段3 FROMGROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1) 
ORDER BY 排序字段

2.查找出重复的数据

SELECT id, 字段1, 字段2, 字段3 
FROMWHERE id
IN (SELECT MIN(id) FROMGROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)

3.过滤(字段1, 字段2, 字段3)全部重复相同的数据,只显示一条(id最小或最大等)数据,包含原本不重复的数据(建议使用)

SELECT * 
FROMWHERE id
IN (SELECT MIN(id) FROMGROUP BY 字段1, 字段2, 字段3)

4.获取到2的结果后就可以通过单条或者多条一起进行删除

你可能感兴趣的:(sql,mysql,sql)