在mysql中,这个sql怎么解决?

图片描述

DELETE FROM tusers WHERE (code,name) in(SELECT code,name FROM tusers GROUP BY code,name HAVING COUNT(*) > 1)

为什么这样写不行?这个该怎么写?

阅读 2.6k
3 个回答
  • 为什么这样写不行

    (SELECT code,name FROM tusers GROUP BY code,name HAVING COUNT(*) > 1)

    选择出了所有重复的code,name,正确

    DELETE FROM tusers WHERE (code,name) in ...

    重复项全都删了,没留下最后一个,所以错误

  • 该怎么写
    提示:select min(id)选出要留下的最后一个,not in删掉其他的。

解决没?(毫无责任感),就是你的唯一是 code,name 为一组的唯一是么?

 --针对像你这样主键自增长不相同,其他字段数据都相同的情况适用
 
Delete from [tusers] where id not in
(
        SELECT MAX(id)        --max(id) 也可以改成:min(id)

        FROM [tusers]

        GROUP BY code,name    --需要剔除那几个用于判断重复的字段,则将它们放在group by语句之后
)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题