1. 程式人生 > >MySql刪除重復只保留一條

MySql刪除重復只保留一條

pda info nbsp update HA avi com div select

本來要刪除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刪除重復只保留一條