sql查询 找出重复数据,并且只保留一条.
1.(错误操作)查所有的重复数据
很明显下列代码运行速度很慢
select * from 表 t where (select count(*) from 表 where 字段1=t.字段1 AND 字段2=t.字段2)>1
所以我们使用下面的分组
1.(速度优化) 查所有的重复数据
SELECT * FROM 表 WHERE (字段1, 字段2, 字段3) IN (SELECT 字段1, 字段2, 字段3 FROM 表 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1) ORDER BY 排序字段
2.查找出重复的数据
SELECT id, 字段1, 字段2, 字段3 FROM 表 WHERE id IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)
3.过滤(字段1, 字段2, 字段3)全部重复相同的数据,只显示一条(id最小或最大等)数据,包含原本不重复的数据(建议使用)
SELECT * FROM 表 WHERE id IN (SELECT MIN(id) FROM 表 GROUP BY 字段1, 字段2, 字段3)
