SQL数据库中查询重复数据,并删除其中的一条

只能删除重复次数为2的记录,多条重复记录时候,需要多次执行
delete from 表名 where id in
(select a.id from
(select 字段1,字段2,min(id) id from 表名 group by 字段1, 字段2 having count(*)>1)
a)
其中:
语句A:select 字段1,字段2,min(id) id from 表名 group by 字段1, 字段2 having count(*)>1 为查询出重复数据。字段1,2都相同才会认为是重复数据,显示的是重复数据中id最小的一条,可以根据需要替换为max(id)。
语句2:(select a.id from: (语句A) a) 不重新再查询一次是没有办法删除的,在datagrip中执行的时候报错,查了一下说是必须再重新查一次才可以删除。最后的a为语句A查询结果表的别名。
语句3:delete from 表名 where id in 语句2 删除语句。

还有个插曲,在执行语句的时候,由于SQL SERVER的默认保护策略,没办法执行删除,需要解除输入的安全模式,用一下语句。
show variables like ‘sql_safe%’;(查询安全模式是否开启,是ON就表明开启了,需要手动关闭)
set sql_safe_updates=off;
操作完毕就可以执行删除语句了。

你可能感兴趣的:(日常工作问题,mysql)