1. 程式人生 > >Mysql資料庫中查詢重複資料和去重資料 , 刪除重複資料的sql及分析

Mysql資料庫中查詢重複資料和去重資料 , 刪除重複資料的sql及分析

資料庫中有重複資料時,用到哪些sql語句?

這裡有若干資料,並摻雜了重複資料

1. 檢視過濾重複後的資料

思路, group by 分組可以對多個列進行分組, 分組後可以過濾掉重複的資料

sql語句:

SELECT id,`name`,age,count(1)
    FROM test GROUP BY `name`,age

2. 檢視重複的資料

剛剛的語句已經把每個組對應的count數查詢出來了,那麼count>1的自然是重複的資料

SELECT id,`name`,age,count(1) as c
    FROM test GROUP
BY `name`,age having c > 1

3. 刪除重複的資料留下一條

思路: 剛剛已經把重複的資料查詢出來了,包括id, 那麼查詢出每個重複組中的唯一一個id,也就是x,就可以delete … id not in (x)

子語句1:

SELECT MIN(id) FROM test
            GROUP BY name,age 

查詢出來的id就是我們需要留下的不重複的資料的id

按理來說只要:
delete from test where id not in 子語句1

DELETE FROM test
    WHERE
id NOT IN ( SELECT MIN(id) FROM test GROUP BY name,age )

但是報錯了

因為在mysql中,不能在一條Sql語句中,即查詢這些資料,同時修改這些資料

解決方法:select的結果再通過一箇中間表temp進行select多一次,就可以避免這個錯誤

DELETE FROM test
    WHERE id NOT IN (
        SELECT temp.min_id FROM (
            SELECT MIN(id) min_id FROM test
                GROUP
BY name,age )AS temp }

刪除成功: