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