欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle怎么去重復列,oracle多個字段去重復

oracle快速刪除重復的記錄

正在看的ORACLE教程是:oracle快速刪除重復的記錄。做項目的時候,一位同事導數(shù)據(jù)的時候,不小心把一個表中的數(shù)據(jù)全都搞重了,也就是說,這個表里所有的記錄都有一條重復的。這個表的數(shù)據(jù)是千萬級的,而且是生產(chǎn)系統(tǒng)。也就是說,不能把所有的記錄都刪除,而且必須快速的把重復記錄刪掉。

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括舟山網(wǎng)站建設(shè)、舟山網(wǎng)站制作、舟山網(wǎng)頁制作以及舟山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,舟山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到舟山省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

對此,總結(jié)了一下刪除重復記錄的方法,以及每種方法的優(yōu)缺點。

為了陳訴方便,假設(shè)表名為Tbl,表中有三列col1,col2,col3,其中col1,col2是主鍵,并且,col1,col2上加了索引。

1、通過創(chuàng)建臨時表

可以把數(shù)據(jù)先導入到一個臨時表中,然后刪除原表的數(shù)據(jù),再把數(shù)據(jù)導回原表,SQL語句如下:

creat table tbl_tmp (select distinct* from tbl);truncate table tbl;//清空表記錄insert into tbl select * from tbl_tmp;//將臨時表中的數(shù)據(jù)插回來。

這種方法可以實現(xiàn)需求,但是很明顯,對于一個千萬級記錄的表,這種方法很慢,在生產(chǎn)系統(tǒng)中,這會給系統(tǒng)帶來很大的開銷,不可行。

2、利用rowid

在oracle中,每一條記錄都有一個rowid,rowid在整個數(shù)據(jù)庫中是唯一的,rowid確定了每條記錄是oracle中的哪一個數(shù)據(jù)文件、塊、行上。在重復的記錄中,可能所有列的內(nèi)容都相同,但rowid不會相同。SQL語句如下:

delete from tbl where rowid in (select a.rowid from tbl a, tbl b where a.rowidb.rowid and a.col1=b.col1 and a.col2 = b.col2)

如果已經(jīng)知道每條記錄只有一條重復的,這個sql語句適用。但是如果每條記錄的重復記錄有N條,這個N是未知的,就要考慮適用下面這種方法了。

3、利用max或min函數(shù)

這里也要使用rowid,與上面不同的是結(jié)合max或min函數(shù)來實現(xiàn)。SQL語句如下

delete from tbl awhere rowid not in (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//這里max使用min也可以

或者用下面的語句

delete from tbl awhere rowid(select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//這里如果把max換成min的話,前面的where子句中需要把""改為""

跟上面的方法思路基本是一樣的,不過使用了group by,減少了顯性的比較條件,提高效率。SQL語句如下:

deletefrom tbl where rowid not in (select max(rowid) from tbl tgroup by t.col1, t.col2);delete from tbl where (col1, col2) in (select col1,col2 from tblgroup bycol1,col2havingcount(*) 1)and rowidnotin(selectnin(rowid)fromtblgroup bycol1,col2havingcount(*) 1)

還有一種方法,對于表中有重復記錄的記錄比較少的,并且有索引的情況,比較適用。假定col1,col2上有索引,并且tbl表中有重復記錄的記錄比較少,SQL語句如下4、利用group by,提高效率

oracle查詢重復數(shù)據(jù)方法

select * from people

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

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)

select * from vitae a

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

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)

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)

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

有兩個意義上的重復記錄,一是完全重復的記錄,也即所有字段均重復的記錄,二是部分關(guān)鍵字段重

復的記錄,比如Name字段重復,而其他字段不一定重復或都重復可以忽略。

select distinct * from tableName

就可以得到無重復記錄的結(jié)果集。

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

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

發(fā)生這種重復的原因是表設(shè)計不周產(chǎn)生的,增加唯一索引列即可解決。

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

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不重復的結(jié)果集(但多了一個autoID字段,實際寫時可以寫

在select子句中省去此列)

select * from tablename where id in (

select id from tablename

group by id

having count(id) 1

)

oracle查詢出來的數(shù)據(jù)怎么消除重復數(shù)據(jù)?

Oracle數(shù)據(jù)庫重復的數(shù)據(jù)一般有兩種去重方法,一、完全重復數(shù)據(jù)去重;二、部分字段數(shù)據(jù)重復去重。

一、完全重復數(shù)據(jù)去重方法

對于表中完全重復數(shù)據(jù)去重,可以采用以下SQL語句。

Code

CREATETABLE"#temp"AS (SELECTDISTINCT * FROM 表名);--創(chuàng)建臨時表,并把DISTINCT 去重后的數(shù)據(jù)插入到臨時表中

truncateTABLE 表名;--清空原表數(shù)據(jù)

INSERTINTO 表名(SELECT * FROM"#temp");--將臨時表數(shù)據(jù)插入到原表中

DROPTABLE"#temp";--刪除臨時表

具體思路是,首先創(chuàng)建一個臨時表,然后將DISTINCT之后的表數(shù)據(jù)插入到這個臨時表中;然后清空原表數(shù)據(jù);再講臨時表中的數(shù)據(jù)插入到原表中;最后刪除臨時表。

二、部分數(shù)據(jù)去重方法

首先查找重復數(shù)據(jù)

select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) 1

將上面的號改為=號就可以查詢出沒有重復的數(shù)據(jù)了。

想要刪除這些重復的數(shù)據(jù),可以使用下面語句進行刪除:

deletefrom 表名 a where 字段1,字段2 in

(select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) 1)

oracle產(chǎn)品服務(wù)

甲骨文公司產(chǎn)品主要有以下幾類:

甲骨文股份有限公司

1.服務(wù)器及工具

數(shù)據(jù)庫服務(wù)器:2013年最新版本Oracle 12C。

應(yīng)用服務(wù)器:Oracle Application Server。

開發(fā)工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。

2.企業(yè)應(yīng)用軟件

企業(yè)資源計劃(ERP)軟件。已有10年以上的歷史。2005年,并購了開發(fā)企業(yè)軟件的仁科軟件公司(PeopleSoft)以增強在這方面的競爭力。

客戶關(guān)系管理(CRM)軟件。自1998年開始研發(fā)這種軟件。2005年,并購了開發(fā)客戶關(guān)系管理軟件的希柏軟件公司(Siebel)。

3. Oracle職業(yè)發(fā)展力計劃(Oracle WDP)

Oracle WDP 全稱為Oracle Workforce Development Program,是Oracle (甲骨文)公司專門面向?qū)W生、個人、在職人員等群體開設(shè)的職業(yè)發(fā)展力課程。Oracle的技術(shù)廣泛應(yīng)用于各行各業(yè),其中電信、電力、金融、政府及大量制造業(yè)都需要Oracle技術(shù)人才,Oracle公司針對職業(yè)教育市場在全球推廣的項目,其以低廉的成本給這部分人群提供Oracle技術(shù)培訓,經(jīng)過系統(tǒng)化的實訓,讓這部分人群能夠迅速掌握Oracle最新的核心技術(shù),并能勝任企業(yè)大型數(shù)據(jù)庫管理、維護、開發(fā)工作。

oracle某個字段有重復數(shù)據(jù),如何刪除多余數(shù)據(jù)只保留1條

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

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

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

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

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

oracle如何消除重復列

select col1,col2,count(*)

from tab_1

group by col1,col2

having count(*) 1;

查出來重復數(shù)據(jù)了

然后

delete tab_1 a where rowid in (

select max(rowid) from tab_1 b

where a.col1=b.col1

and a.col2=b.col2

);

OK,搞定!

記住了,刪除之前一定要先備份,在查詢是不是要刪除的數(shù)據(jù),然后再刪除。

分享名稱:oracle怎么去重復列,oracle多個字段去重復
分享路徑:http://chinadenli.net/article15/dsiiogi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)站策劃移動網(wǎng)站建設(shè)Google外貿(mào)建站搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化