要找出欄位值重覆的記錄的狀況倒是蠻常見的,最簡單的做法就是利用 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) 裡面的重覆欄位記錄,有二種方法:
(第一種)
先把重覆的資料利用 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
流程已經說的很清楚了,再來的細節就不用多說了,應該很簡單了啦。^^
6 comments On [資料庫] 利用 SQL 找出欄位值重覆的記錄
distinct 也蠻常用的…
distinct 是蠻常用的,不過它的用處是把重覆的資料當作沒看到,但沒辦法抓出重覆的資料來喔! ^_^
用 distinct 可以作出第三種喔~~ ^^
就是直接利用distinct產生不重覆的記錄到 Table (B),再把 Table (A) 殺了,用 Table (B) 取代 Table (A)。
Insert INTO temp_table
SELECT DISTINCT * FROM table
請問我在MYSQL也可以這樣用嗎
感謝米卡補充。^^
kind:
我這篇就是在 MySQL 上試的喔,所以 MySQL 絕對沒問題的。
您好:
可以請問, 如果用sql DATEADD語法去不斷比對判斷前兩小時與現在的資料有無重覆,
如果有重複則不顯示重複的資料, 如果沒重複的資料則顯示, 要怎麼寫…?