Sql重複資料刪除行

來源:互聯網
上載者:User

問題描述:

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

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

資料格式如下表所示:

ID

StuID

StuName

StuSex

StuAddress

StuMail

1

1001

張揚

因果巷1號

zy@163.com

2

1001

張揚

因果巷1號

zy@163.com

3

1002

張律

虎丘路9號

zl@eyou.com.cn

4

1002

張律

虎丘路9號

zl@eyou.com.cn

5

1002

張律

虎丘路9號

zl@eyou.com.cn

6

1003

沈嫻華

東環路36號

sxh@163.com

7

1003

沈嫻華

東環路36號

sxh@163.com

8

1003

沈嫻華

東環路36號

sxh@163.com

9

1004

杜崗

南園南路30號

dgang@oceansoft.com

10

1004

杜崗

南園南路30號

dgang@oceansoft.com

11

1005

許增英

人民路48-6號

xzy@eyou.com

12

1005

許增英

人民路48-6號

xzy@eyou.com

具體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)

 

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

資料格式如下表所示:

StuID

StuName

StuSex

StuAddress

StuMail

1001

張揚

因果巷1號

zy@163.com

1001

張揚

因果巷1號

zy@163.com

1002

張律

虎丘路9號

zl@eyou.com.cn

1002

張律

虎丘路9號

zl@eyou.com.cn

1002

張律

虎丘路9號

zl@eyou.com.cn

1003

沈嫻華

東環路36號

sxh@163.com

1003

沈嫻華

東環路36號

sxh@163.com

1003

沈嫻華

東環路36號

sxh@163.com

1004

杜崗

南園南路30號

dgang@oceansoft.com

1004

杜崗

南園南路30號

dgang@oceansoft.com

1005

許增英

人民路48-6號

xzy@eyou.com

1005

許增英

人民路48-6號

xzy@eyou.com

這種情況,可以通過暫存資料表的方式實現:

篩選出不同的記錄(Distinct)插入新表(NewStudent)

SELECT  DISTINCT  *  INTO  NewStudent    FROM  Student

truncate table Student

insert Student select * from NewStudent

drop table NewStudent

--------------------------------------------------------------

重複資料刪除的,只留一條: 

alter   table   表   add    newfield   int  identity(1,1) 
delete   表  
where   newfield   not   in ( select   min(newfield)   from   表   group   by   除newfield外的所有欄位) 

alter   table   表   drop   column   newfield


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.