Sql刪除重複行

問題描述:

  一般數據庫中表在設計時都會有主鍵來約束相同記錄,但由於從外部數據源導入或其它原因造成一張表中大量相同記錄的問題,可以通過SQL語句實現去除相同記錄的操作:

狀況一:表中主鍵是自動編號列ID,但實際數據存在大量重複,如果重複記錄是有規律的可以通過ID值運算處理,但如果記錄重複頻率不一,並且數據量很多的情況下通過企業管理器手工刪除是繁瑣的,如果使用SQL命令,只需一句即可完成。

數據格式如下表所示:

ID

StuID

StuName

StuSex

StuAddress

StuMail

1

1001

張揚

因果巷1

[email protected]

2

1001

張揚

因果巷1

[email protected]

3

1002

張律

虎丘路9

[email protected]

4

1002

張律

虎丘路9

[email protected]

5

1002

張律

虎丘路9

[email protected]

6

1003

沈嫺華

東環路36

[email protected]

7

1003

沈嫺華

東環路36

[email protected]

8

1003

沈嫺華

東環路36

[email protected]

9

1004

杜崗

南園南路30

[email protected]

10

1004

杜崗

南園南路30

[email protected]

11

1005

許增英

人民路48-6

[email protected]

12

1005

許增英

人民路48-6

[email protected]

具體SQL命令語句:

DELETE FROM  Student WHERE  ID   NOT  IN (SELECT  MAX(ID) FROM Student GROUP BY stuID,StuName,StuSex,StuAddress)

這樣可以把每行除ID列以外所有相同的數據行中,只保留ID值最大的記錄,其餘全部刪除

當然,也可以保留ID列最小的記錄行,只需改爲MIN(ID)即可

DELETE FROM  Student WHERE  ID   NOT  IN (SELECT  MIN(ID) FROM Student GROUP BY stuID,StuName,StuSex,StuAddress)

 

狀況二:表中未設主鍵,造成記錄的重複(在SQL2000企業管理器中無法刪除,只能通過查詢分析器實現)

數據格式如下表所示:

StuID

StuName

StuSex

StuAddress

StuMail

1001

張揚

因果巷1

[email protected]

1001

張揚

因果巷1

[email protected]

1002

張律

虎丘路9

[email protected]

1002

張律

虎丘路9

[email protected]

1002

張律

虎丘路9

[email protected]

1003

沈嫺華

東環路36

[email protected]

1003

沈嫺華

東環路36

[email protected]

1003

沈嫺華

東環路36

[email protected]

1004

杜崗

南園南路30

[email protected]

1004

杜崗

南園南路30

[email protected]

1005

許增英

人民路48-6

[email protected]

1005

許增英

人民路48-6

[email protected]

這種情況,可以通過生成新表的方式實現:篩選出不同的記錄(Distinct)插入新表(NewStudent)

SELECT  DISTINCT  *  INTO  NewStudent    FROM  Student

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章