MySQL 查询一张表重复出现的数据 保留一条
在实际应用场景 有些接口会出现并发 多次调用 导致数据重复 实际只需要一条数据但是出现了 多条重复的 导致结果出现问题
查询重复数据
-- 我这种是 有两个条件 如果只有一个条件 把 括号去掉就行
SELECT
id
FROM
表名 g
WHERE
( g.字段1, g.字段2) IN ( SELECT 字段1, 字段2 FROM 表名 GROUP BY 字段1, 字段2 HAVING count( * ) > 1 )
AND Id NOT IN ( SELECT min( id ) FROM 表名 GROUP BY 字段1, 字段2 HAVING count( * ) > 1 )
单条件
SELECT
id
FROM
表名 g
WHERE
g.字段1 IN ( SELECT 字段1 FROM 表名 GROUP BY 字段1 HAVING count( * ) > 1 )
AND Id NOT IN ( SELECT min( id ) FROM 表名 GROUP BY 字段1 HAVING count( * ) > 1 )
删除重复数据 只需再包一层就行
delete from 表名 where id in (
select id from (
SELECT
id
FROM
表名 g
WHERE
( g.字段1, g.字段2) IN ( SELECT 字段1, 字段2 FROM 表名 GROUP BY 字段1, 字段2 HAVING count( * ) > 1 )
AND Id NOT IN ( SELECT min( id ) FROM 表名 GROUP BY 字段1, 字段2 HAVING count( * ) > 1 )
) as a
)