mysql删除表中重复数据

mysql删除表中重复数据


SQL语句

1.格式

代码如下(当前示例为软删除,且以自增主键字段进行取舍,保留最新的一条数据):

# select * from `表名`
 UPDATE `表名` SET `软删除字段` = `软删除值`
  WHERE (`需要根据分组来进行筛选的字段`) IN
   (SELECT * FROM
    (SELECT `需要根据分组来进行筛选的字段` FROM `表名`
     GROUP BY  `需要根据分组来进行筛选的字段`
      HAVING COUNT(*) > 1) AS a)
  AND `主键字段` NOT IN
  (SELECT * FROM
    (SELECT MAX(`主键字段`) FROM `表名`
     GROUP BY `需要根据分组来进行筛选的字段`
      HAVING COUNT(*) > 1) AS b)

2.示例

# select id,title,city_id,city_column_id from `tree_news`
 UPDATE `tree_news` SET delete_time = 1675220994
 WHERE (title, city_id, `city_column_id`) IN
  (SELECT  * FROM
   (SELECT title, city_id, `city_column_id` FROM `tree_news`
    GROUP BY title, city_id, `city_column_id`
    HAVING COUNT(*) > 1) AS a)
 AND id NOT IN
 (SELECT * FROM (SELECT MAX(id) FROM `tree_news`
    GROUP BY title, city_id, `city_column_id`
     HAVING COUNT(*) > 1) AS b)
 AND delete_time = 0
 AND city_id > 0
 AND city_column_id > 0

tree_news表中的重复数据进行删除(软删除)。根据titlecity_idcity_column_id进行分组统计,数量大于1的说明存在重复数据,将重复数据中id最大的数据进行保留

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值