[資料庫] 利用 SQL 找出欄位值重覆的記錄

要找出欄位值重覆的記錄的狀況倒是蠻常見的,最簡單的做法就是利用 Group By。



SELECT * FROM table

GROUP BY id

HAVING count(*)>1



如上所示,就是找出 id 重覆次數超過1以上的欄位,如果有多個欄位為重覆條件的話,就改成:



SELECT * FROM table

GROUP BY id1, id2

HAVING count(*)>1



如果要去除掉 Table (A) 裡面的重覆欄位記錄,有二種方法:



(第一種)

4545 先把重覆的資料利用 Subquery Inert 到另一個 Table (B) ,刪掉 Table (A) 的重覆記錄後,再把 Table (B) 的資料插入 Table (A) 來。



(第二種)

先把重覆的資料利用 Subquery Inert 到另一個 Table (B),再把非重覆的資料Subquery Inert 到同一個 Table (B),最後把 Table (A) 殺了,用 Table (B) 取代 Table (A)。



執行提示:







Insert INTO temp_table

WHERE

SELECT * FROM table

GROUP BY id1, id2

HAVING count(*)>1





先插入重覆資料到暫存表單,如果二個 table 的結構不同,就必須要指定欄位。



Insert INTO temp_table (field1, field2)

WHERE

SELECT field1,field2 FROM table

GROUP BY id1, id2

HAVING count(*)>1



流程已經說的很清楚了,再來的細節就不用多說了,應該很簡單了啦。^^

用 distinct 可以作出第三種喔~~ ^^



就是直接利用distinct產生不重覆的記錄到 Table (B),再把 Table (A) 殺了,用 Table (B) 取代 Table (A)。



Insert INTO temp_table

SELECT DISTINCT * FROM table



arrow
arrow
    全站熱搜

    killworm737 發表在 痞客邦 留言(0) 人氣()