2022年5月12日 星期四

MySQL 移除重複資料

資料表[data]欄位: [id] [A欄][B欄] [C欄][D欄]

當有多筆資料的A, B, C三個欄位相同時,只保留一筆的語法。


原本以為用用A, B, C 三個欄位group by ,找出count > 1的資料即為重複的所有資料筆數。

語法:

SELECT *

FROM data

GROUP BY A, B, C

HAVING count(id)  > 1


但是發現這樣找出來的資料僅顯示一筆資料,其他筆數不會顯示。

例如: 

[1][蘋果][日本][50g][0210]

[2][香蕉][台灣][500g][0220]

[3][蘋果][日本][50g][0310]

[4][蘋果][日本][50g][0410]

[5][香蕉][台灣][500g][0310]


以上五筆資料,透過上述語法查詢 結果如下:

[1][蘋果][日本][50g][0210]

[2][香蕉][台灣][500g][0220]


這個結果反而是重複筆數中要保留的資料!

另外要保留的是,不重複的資料,也就是只有一筆的資料

語法:

SELECT *

FROM data

GROUP BY A, B, C

HAVING count(id)  = 1


因此兩種結果是要保留的,因此就是排除以上兩種結果的資料,

剩下的就是要刪除的,可先用Select選出來檢查。

SELECT * FROM data

WHERE 

id NOT IN 

( SELECT id FROM data GROUP BY A, B, C HAVING count(id) > 1 ) 

AND

id NOT IN 

( SELECT id FROM data GROUP BY A, B, C HAVING count(id) = 1 )


確認以上篩選出的結果是要刪除得,再把SELECT改成DELETE就可以了。


---------------------------------------------------------------------------------

篩選出某個欄位重複值的資料

SELECT * FROM table WHERE colName IN (SELECT colName FROM table GROUP BY colName HAVING count(colName ) > 1) ORDER BY colName 


沒有留言:

張貼留言