中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

SQL Server 刪除重復記錄的幾種方法
來源:易賢網 閱讀:1390 次 日期:2014-09-17 15:49:40
溫馨提示:易賢網小編為您整理了“SQL Server 刪除重復記錄的幾種方法”,方便廣大網友查閱!

例如:

id name value

1 a pp

2 a pp

3 b iii

4 b pp

5 b pp

6 c pp

7 c pp

8 c iii

id是主鍵

要求得到這樣的結果

id name value

1 a pp

3 b iii

4 b pp

6 c pp

8 c iii

方法1

delete YourTable

where [id] not in (

select max([id]) from YourTable

group by (name + value))

方法2

delete a

from 表 a left join(

select id=min(id) from 表 group by name,value

)b on a.id=b.id

where b.id is null

查詢及刪除重復記錄的SQL語句

查詢及刪除重復記錄的SQL語句

1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重復記錄(多個字段)

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二)

比方說

在A表中存在一個字段“name”,

而且不同記錄之間的“name”值有可能會相同,

現在就是需要查詢出在該表中的各記錄之間,“name”值存在重復的項;

Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果還查性別也相同大則如下:

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)

方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0 方法二

"重復記錄"有兩個意義上的重復記錄,一是完全重復的記錄,也即所有字段均重復的記錄,二是部分關鍵字段重復的記錄,比如Name字段重復,而其他字段不一定重復或都重復可以忽略。

1、對于第一種重復,比較容易解決,使用

select distinct * from tableName

就可以得到無重復記錄的結果集。

如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。

2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下

假設有重復的字段為Name,Address,要求得到這兩個字段唯一的結果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一個select即得到了Name,Address不重復的結果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)

(四)

查詢重復

select * from tablename where id in (

select id from tablename

group by id

having count(id) > 1

)

學習sql有一段時間了,發現在我建了一個用來測試的表(沒有建索引)中出現了許多的重復記錄。后來總結了一些刪除重復記錄的方法,在Oracle中,可以通過唯一rowid實現刪除重復記錄;還可以建臨時表來實現...這個只提到其中的幾種簡單實用的方法,希望可以和大家分享(以表employee為例)。

SQL> desc employee

Name Null? Type

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

emp_id NUMBER(10)

emp_name VARCHAR2(20)

salary NUMBER(10,2)

可以通過下面的語句查詢重復的記錄:

SQL> select * from employee;

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

1 sunshine 10000

2 semon 20000

2 semon 20000

3 xyz 30000

2 semon 20000

SQL> select distinct * from employee;

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

2 semon 20000

3 xyz 30000

SQL> select * from employee group by emp_id,emp_name,salary having count (*)>1

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

2 semon 20000

SQL> select * from employee e1

where rowid in (select max(rowid) from employe e2

where e1.emp_id=e2.emp_id and

e1.emp_name=e2.emp_name and e1.salary=e2.salary);

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

3 xyz 30000

2 semon 20000

2. 刪除的幾種方法:

(1)通過建立臨時表來實現

SQL>create table temp_emp as (select distinct * from employee)

SQL> truncate table employee; (清空employee表的數據)

SQL> insert into employee select * from temp_emp; (再將臨時表里的內容插回來)

( 2)通過唯一rowid實現刪除重復記錄.在Oracle中,每一條記錄都有一個rowid,rowid在整個數據庫中是唯一的,rowid確定了每條記錄是在Oracle中的哪一個數據文件、塊、行上。在重復的記錄中,可能所有列的內容都相同,但rowid不會相同,所以只要確定出重復記錄中那些具有最大或最小rowid的就可以了,其余全部刪除。

SQL>delete from employee e2 where rowid not in (

select max(e1.rowid) from employee e1 where

e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--這里用min(rowid)也可以。

SQL>delete from employee e2 where rowid <(

select max(e1.rowid) from employee e1 where

e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and

e1.salary=e2.salary);

(3)也是通過rowid,但效率更高。

SQL>delete from employee where rowid not in (

select max(t1.rowid) from employee t1 group by

t1.emp_id,t1.emp_name,t1.salary);--這里用min(rowid)也可以。

EMP_ID EMP_NAME SALARY

1 sunshine 10000

3 xyz 30000

2 semon 20000

SQL> desc employee

Name Null? Type

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

emp_id NUMBER(10)

emp_name VARCHAR2(20)

salary NUMBER(10,2)

可以通過下面的語句查詢重復的記錄:

SQL> select * from employee;

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

1 sunshine 10000

2 semon 20000

2 semon 20000

3 xyz 30000

2 semon 20000

SQL> select distinct * from employee;

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

2 semon 20000

3 xyz 30000

SQL> select * from employee group by emp_id,emp_name,salary having count (*)>1

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

2 semon 20000

SQL> select * from employee e1

where rowid in (select max(rowid) from employe e2

where e1.emp_id=e2.emp_id and

e1.emp_name=e2.emp_name and e1.salary=e2.salary);

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

3 xyz 30000

2 semon 20000

2. 刪除的幾種方法:

(1)通過建立臨時表來實現

SQL>create table temp_emp as (select distinct * from employee)

SQL> truncate table employee; (清空employee表的數據)

SQL> insert into employee select * from temp_emp; (再將臨時表里的內容插回來)

( 2)通過唯一rowid實現刪除重復記錄.在Oracle中,每一條記錄都有一個rowid,rowid在整個數據庫中是唯一的,rowid確定了每條記錄是在Oracle中的哪一個數據文件、塊、行上。在重復的記錄中,可能所有列的內容都相同,但rowid不會相同,所以只要確定出重復記錄中那些具有最大或最小rowid的就可以了,其余全部刪除。

SQL>delete from employee e2 where rowid not in (

select max(e1.rowid) from employee e1 where

e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--這里用min(rowid)也可以。

SQL>delete from employee e2 where rowid <(

select max(e1.rowid) from employee e1 where

e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and

e1.salary=e2.salary);

(3)也是通過rowid,但效率更高。

SQL>delete from employee where rowid not in (

select max(t1.rowid) from employee t1 group by

t1.emp_id,t1.emp_name,t1.salary);--這里用min(rowid)也可以。

EMP_ID EMP_NAME SALARY

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

1 sunshine 10000

3 xyz 30000

2 semon 20000

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:SQL Server 刪除重復記錄的幾種方法
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲女人天堂成人av在线| 欧美mv日韩mv亚洲| 亚洲午夜免费视频| 国产精品久久久久久久久久尿| 亚洲在线一区二区| 亚洲国产三级在线| 国产精品国产三级欧美二区 | 美女精品网站| 亚洲日本欧美日韩高观看| 国产欧美日韩亚洲| 久久久久一本一区二区青青蜜月| 亚洲国产一区二区a毛片| 欧美日韩八区| 欧美一区二区三区在线观看视频| 亚洲国产女人aaa毛片在线| 国产日韩一区在线| 欧美日在线观看| 欧美成人精品一区二区| 久久成人免费| 午夜久久福利| 亚洲性夜色噜噜噜7777| 日韩午夜黄色| 亚洲国产天堂久久综合| 黄色国产精品| 国产综合亚洲精品一区二| 欧美激情亚洲精品| 欧美三级视频| 欧美视频1区| 欧美日韩一区二区三区在线视频| 欧美成人午夜免费视在线看片| 久久久另类综合| 久久精品国产欧美激情| 亚洲欧美卡通另类91av| 亚洲视频在线观看| 亚洲一级黄色av| 一区二区三欧美| 一卡二卡3卡四卡高清精品视频| 亚洲日韩视频| 99国产精品久久久久久久| 日韩特黄影片| 这里只有视频精品| 亚洲视频在线二区| 亚洲欧美韩国| 久久本道综合色狠狠五月| 性欧美video另类hd性玩具| 亚洲女性喷水在线观看一区| 一区二区国产在线观看| 亚洲午夜精品久久久久久app| 欧美一区二区三区在线观看| 欧美中文字幕视频在线观看| 欧美在线看片| 美女诱惑黄网站一区| 久久精品99国产精品| 欧美精品日韩综合在线| 欧美日韩国产天堂| 国产精品www.| 国产夜色精品一区二区av| 国色天香一区二区| 最新中文字幕亚洲| 99视频超级精品| 亚洲综合久久久久| 久久精品中文| 欧美成人亚洲成人| 欧美色另类天堂2015| 国产精品女人网站| 伊人一区二区三区久久精品| 亚洲电影免费观看高清完整版在线| 精品成人在线视频| 一区二区三区日韩| 一区二区在线不卡| 在线视频日本亚洲性| 欧美中文字幕视频在线观看| 一区二区三区在线观看视频| 国产综合久久久久久| 亚洲激情啪啪| 香蕉免费一区二区三区在线观看| 久久精品中文字幕一区二区三区| 欧美三区美女| 在线免费观看欧美| 亚洲字幕在线观看| 欧美成年人网站| 国产精品久久午夜夜伦鲁鲁| 精品福利av| 亚洲永久精品国产| 免费在线欧美视频| 国产精品永久免费| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久另类ts人妖一区二区| 国产精品一区二区三区乱码| 91久久黄色| 久久国产日韩| 国产精品爱久久久久久久| 一区精品久久| 午夜精品久久99蜜桃的功能介绍| 欧美成人精品影院| 韩国av一区二区三区四区| 国产精品一区=区| 欧美日韩成人一区二区三区| 欧美亚洲成人网| 亚洲风情在线资源站| 亚洲欧美另类久久久精品2019| 欧美大片一区二区| 国产亚洲女人久久久久毛片| 亚洲私人影吧| 欧美日韩成人在线视频| 亚洲国产精品成人久久综合一区| 欧美一区二区日韩| 国产精品v欧美精品v日本精品动漫| 亚洲丶国产丶欧美一区二区三区| 久久综合精品国产一区二区三区| 欧美日韩极品在线观看一区| 在线观看一区| 久久久精品tv| 国产亚洲a∨片在线观看| 亚洲欧美日韩另类精品一区二区三区| 欧美精品日日鲁夜夜添| 亚洲日本成人网| 欧美暴力喷水在线| 亚洲成色精品| 另类天堂av| 亚洲国产精品第一区二区三区| 久久综合伊人77777麻豆| 国精产品99永久一区一区| 亚洲一区黄色| 国产精品视频福利| 欧美一区二区视频免费观看| 国产精品久线观看视频| 亚洲午夜视频在线| 国产精品一卡| 久久国产精品一区二区| 国产在线不卡精品| 久久午夜色播影院免费高清| 激情国产一区| 麻豆9191精品国产| 亚洲欧洲午夜| 欧美日韩一区在线播放| 亚洲激情电影在线| 欧美二区在线观看| 日韩亚洲欧美在线观看| 欧美日韩亚洲一区三区| 国产伊人精品| 国产区欧美区日韩区| 亚洲精品一区二区三区av| 欧美精品日韩一区| 亚洲无线一线二线三线区别av| 国产精品一区二区久久国产| 久久精品一二三区| 亚洲韩国精品一区| 欧美视频一二三区| 久久久久成人精品免费播放动漫| 亚洲精美视频| 国产乱理伦片在线观看夜一区| 久久精品国产亚洲aⅴ| 亚洲第一级黄色片| 欧美天天影院| 久久夜色精品一区| 99re亚洲国产精品| 国产午夜精品全部视频在线播放 | 亚洲高清一区二| 欧美日韩日本视频| 欧美在线免费| 99国产精品久久久久久久久久 | 香蕉久久夜色| 国精品一区二区| 久久免费黄色| 亚洲精品永久免费精品| 国产精品久久久爽爽爽麻豆色哟哟| 中日韩高清电影网| 国产精品午夜在线观看| 久久婷婷一区| 国产精品亚洲综合天堂夜夜| 久久久精品国产99久久精品芒果| 欧美视频一区二区三区| 欧美专区一区二区三区| 99国产精品视频免费观看一公开| 国产欧美精品一区二区色综合| 免费不卡在线视频| 欧美在线观看一二区| 一本色道久久综合亚洲精品按摩 | 国产精品―色哟哟| 一区二区三区视频在线播放| 国产欧美日韩综合一区在线观看 | 久久手机精品视频| 亚洲精品美女91| 国产一区二区成人| 国产精品大片wwwwww| 欧美成人一品| 久久久免费精品视频| 亚洲午夜视频在线观看| 91久久精品国产91久久性色tv | 欧美成人一区二区三区片免费| 99热这里只有精品8| 欧美在线播放| 国产一区二区按摩在线观看| 久久久精品2019中文字幕神马| 久久久久国产精品一区二区| 国产欧美精品va在线观看| 亚洲影院免费观看| 9l视频自拍蝌蚪9l视频成人| 亚洲精品一区中文|