首页 > 数据库技术 > 详细

mysql根据多列去除重复数据

时间:2021-04-10 11:08:19      阅读:20      评论:0      收藏:0      [点我收藏+]

  首先我的数剧是这样的:

  技术分享图片

 

   我想根据name1、relation和name2判断如果重复的话删除重复的数据且保留id最小的一条数据,于是写了下面的sql语句

  

DELETE
FROM star_relation
WHERE (name1,relation,name2)IN
                        (SELECT
                                name1,
                                relation,
                                name2
                              FROM star_relation
                              GROUP BY name1,relation,name2
                              HAVING COUNT( * ) > 1)
    AND id NOT IN
                                        (SELECT
                        MIN(id) AS id
                        FROM star_relation
                        GROUP BY name1,relation,name2
                        HAVING COUNT( * ) > 1)

结果报了以下错误:[Err] 1093 - You can‘t specify target table ‘star_relation‘ for update in FROM clause

查找资料得知:大概是因为不能直接在查询的语句中进行操作。所以解决办法就是:将查询包装一层,于是有了下面的代码:(亲测有效)

DELETE
FROM star_relation
WHERE (name1,relation,name2)IN(SELECT
                          name1,
                          relation,
                          name2
                        FROM (SELECT
                                name1,
                                relation,
                                name2
                              FROM star_relation
                              GROUP BY name1,relation,name2
                              HAVING COUNT( * ) > 1) a)
    AND id NOT IN (SELECT id FROM
                                                (SELECT
                          MIN(id) AS id
                        FROM star_relation
                        GROUP BY name1,relation,name2
                        HAVING COUNT( * ) > 1)b)

 

mysql根据多列去除重复数据

原文:https://www.cnblogs.com/qianmo123/p/14639485.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!