如何查詢表中重複數據

建立以table,表名爲Test_Table,設置字段分別爲ID(自增),A,B,C,D,E,然後向裏分別插入如下數據:

1,1,1,1,1

1,1,1,1,1

2,2,2,2,2

3,3,3,3,3

4,4,4,4,4

4,4,4,4,4

5,5,5,5,5

5,5,5,5,5
6,6,6,6,6

7,7,7,7,7

如查找重複的數據,則SQL語句如下:

select P.* from Test_Table as P  inner join
(SELECT A,B,C,D,E FROM Test_Table
GROUP BY A,B,C,D,E HAVING COUNT(*)>1) as Q
on P.A=Q.A AND P.B=Q.B AND P.C=Q.C AND P.D=Q.D
AND P.E=Q.E,結果如下:

ID A B C D E

1   1 1 1 1 1

2   1 1 1 1 1  

5   4 4 4 4 4

6   4 4 4 4 4

7   5 5 5 5 5

8   5 5 5 5 5

如查找查找ID最大的重複記錄,代碼如下:

select P.* from Test_Table as P  inner join
(SELECT A,B,C,D,E FROM Test_Table
GROUP BY A,B,C,D,E HAVING COUNT(*)>1) as Q
on P.A=Q.A AND P.B=Q.B AND P.C=Q.C AND P.D=Q.D
AND P.E=Q.E
WHERE P.ID NOT IN (SELECT MIN(ID) FROM Test_Table
GROUP BY A,B,C,D,E HAVING COUNT(*)>1)

結果如下所示:

ID A B C D E

2   1 1 1 1 1  

6   4 4 4 4 4

8   5 5 5 5 5

若刪除重複記錄中ID值最大的數據,則代碼如下:

delete from Test_Table where ID IN (
select P.ID from Test_Table as P  inner join
(SELECT A,B,C,D,E FROM Test_Table
GROUP BY A,B,C,D,E HAVING COUNT(*)>1) as Q
on P.A=Q.A AND P.B=Q.B AND P.C=Q.C AND P.D=Q.D
AND P.E=Q.E
WHERE P.ID NOT IN (SELECT MIN(ID) FROM Test_Table
GROUP BY A,B,C,D,E HAVING COUNT(*)>1))

 

當然,以上代碼只是針對表中數據比較少而言,如數據表中存儲有百萬條以上數據,如刪除其中的重複數據,建議還是需要加入臨時表進行處理。

發佈了3 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章