首页 > 数据库技术 > 详细

MySql删除重复只保留一条

时间:2018-04-14 16:10:58      阅读:171      评论:0      收藏:0      [点我收藏+]

本来要删除error_barcode表中barcode值重复的只保留一条

表结构如下(PS:id是自增长,该图是删除成功所以id不连续)

技术分享图片

sql语句如下:

DELETE
FROM
    error_barcode
WHERE
    barCode IN (
        SELECT
            barCode
        FROM
            error_barcode
        GROUP BY
            barCode
        HAVING
            count(barCode) > 1
    )
AND id NOT IN (

    SELECT
        min(id)
    FROM
        error_barcode
    GROUP BY
        barCode
    HAVING
        count(barCode) > 1
)

但是却报错误

技术分享图片

上网查找了下,这是MySql的一个问题,就是不能再同一个语句里对同一张表先select某些值在update,

 那就需要把子查询在放入一个子查询中

DELETE from error_barcode 
WHERE barCode in(
    select a.barCode from(select * from error_barcode)a  GROUP BY barCode having count(barCode)>1
)and id not in (
    select min(id) from(select * from error_barcode)b  GROUP BY barCode having count(barCode)>1
)

可以看到我把下面两个子查询

 SELECT
            barCode
        FROM
            error_barcode
        GROUP BY
            barCode
        HAVING
            count(barCode) > 1
 SELECT
        min(id)
    FROM
        error_barcode
    GROUP BY
        barCode
    HAVING
        count(barCode) > 1

改成

select a.barCode from(select * from error_barcode)a  GROUP BY barCode having count(barCode)>1
 select min(id) from(select * from error_barcode)b  GROUP BY barCode having count(barCode)>1

就行了

技术分享图片

 

MySql删除重复只保留一条

原文:https://www.cnblogs.com/xudongxuIT/p/8831977.html

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