資料表[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
沒有留言:
張貼留言