欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle查詢重復(fù)數(shù)據(jù)和刪除重復(fù)記錄示例分享

 更新時間:2013年12月31日 10:35:23   投稿:zxhpj  
oracle查詢重復(fù)數(shù)據(jù)和刪除重復(fù)記錄示例分享,大家參考使用吧

一、查詢某個字段重復(fù)

   select *
     from User u
     where u.user_name in (select u.user_name 
                 from User u
                group by u.user_name  having count(*) > 1)

二,刪除表中某幾個字段的重復(fù)

例:表中有條六條記錄。   其中張三和王五   的記錄有重復(fù)
TableA

id customer PhoneNo 
001 張三 777777 
002 李四 444444 
003 王五 555555 
004 張三 777777 
005 張三 777777 
006 王五 555555 
如何寫一個sql語句將TableA變成如下 
001 張三 777777 
002 李四 444444 
003 王五 555555

測試環(huán)境

create table TableA ( id varchar(3),customer varchar(5),PhoneNo varchar(6)) 
insert into TableA select '001','張三','777777' 
union all select '002','李四','444444' 
union all select '003','王五','555555' 
union all select '004','張三','777777' 
union all select '005','張三','777777' 
union all select '006','王五','555555'

結(jié)果

delete TableA from TableA Twhere

exists( 
select 1fromtablea where customer=T.customer and phoneno=T.phoneno 
andid < tt.id
)

總結(jié)

該方法適用于有一個字段為自增性,例如本例中的:id

delete 表名 from 表名 as Twhere

exists( 
select 1from表名 where 字段A=T.字段A and 字段B=T.字段B,(....) 
and自增列 < T.自增列
)

三,查詢并刪除重復(fù)記錄的SQL語句

查詢及刪除重復(fù)記錄的SQL語句

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

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

2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(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)

注:rowid為oracle自帶不用該.....

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

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

4、刪除表中多余的重復(fù)記錄(多個字段),只留有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、查找表中多余的重復(fù)記錄(多個字段),不包含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”值有可能會相同,
現(xiàn)在就是需要查詢出在該表中的各記錄之間,“name”值存在重復(fù)的項;

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 方法二
"重復(fù)記錄"有兩個意義上的重復(fù)記錄,一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。
1、對于第一種重復(fù),比較容易解決,使用
select distinct * from tableName
就可以得到無重復(fù)記錄的結(jié)果集。
如果該表需要刪除重復(fù)的記錄(重復(fù)記錄保留1條),可以按以下方法刪除

select distinct * into #Tmp from tableName 
drop table tableName 
select * into tableName from #Tmp 
drop table #Tmp 

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

2、這類重復(fù)問題通常要求保留重復(fù)記錄中的第一條記錄,操作方法如下
假設(shè)有重復(fù)的字段為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不重復(fù)的結(jié)果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)

(四)
查詢重復(fù)

select * from tablename where id in ( 
select id from tablename 
group by id 
having count(id) > 1 
)

相關(guān)文章

  • 常見數(shù)據(jù)庫系統(tǒng)比較  Oracle數(shù)據(jù)庫

    常見數(shù)據(jù)庫系統(tǒng)比較 Oracle數(shù)據(jù)庫

    常見數(shù)據(jù)庫系統(tǒng)比較 Oracle數(shù)據(jù)庫...
    2007-03-03
  • oracle 11g的安裝注意事項總結(jié)

    oracle 11g的安裝注意事項總結(jié)

    這篇文章主要給大家介紹了關(guān)于oracle 11g的安裝注意事項,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Oracle分組函數(shù)之ROLLUP的基本用法

    Oracle分組函數(shù)之ROLLUP的基本用法

    這篇文章主要給大家介紹了關(guān)于Oracle分組函數(shù)之ROLLUP的基本用法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Oracle數(shù)據(jù)庫具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Oracle數(shù)據(jù)庫中刪除表空間的詳細(xì)步驟與示例代碼

    Oracle數(shù)據(jù)庫中刪除表空間的詳細(xì)步驟與示例代碼

    在 Oracle 數(shù)據(jù)庫中,表空間是存儲數(shù)據(jù)的邏輯容器,有時候,我們可能需要刪除不再使用的表空間以釋放空間或進(jìn)行數(shù)據(jù)庫重組,本文將詳細(xì)介紹在 Oracle 數(shù)據(jù)庫中刪除表空間的步驟和示例代碼,需要的朋友可以參考下
    2024-01-01
  • Oracle dbf文件移動的方法

    Oracle dbf文件移動的方法

    這篇文章主要介紹了Oracle dbf文件移動的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C#連接ORACLE出現(xiàn)亂碼問題的解決方法

    C#連接ORACLE出現(xiàn)亂碼問題的解決方法

    最近接觸c#的一個項目,連接SqlServer數(shù)據(jù)庫倒也是很好用,但是遇到oracle數(shù)據(jù)庫就出現(xiàn)亂碼了,于是搜索好多資料,具體解決方法如下
    2021-10-10
  • oracle 日期時間函數(shù)使用總結(jié)

    oracle 日期時間函數(shù)使用總結(jié)

    經(jīng)常寫 sql 的同學(xué)應(yīng)該會接觸到一些 oracle 的日期時間函數(shù), 例如: 財務(wù)軟件或者人力資源軟件需要按照每年, 每季度, 每月, 甚至每個星期來進(jìn)行統(tǒng)計
    2014-05-05
  • Oracle表關(guān)聯(lián)更新幾種方法小結(jié)

    Oracle表關(guān)聯(lián)更新幾種方法小結(jié)

    這篇文章主要介紹了Oracle表關(guān)聯(lián)更新幾種方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • oracle擴(kuò)展表空間方法示例

    oracle擴(kuò)展表空間方法示例

    這篇文章主要給大家介紹了關(guān)于oracle擴(kuò)展表空間的相關(guān)資料,生產(chǎn)環(huán)境遇到數(shù)據(jù)量暴增或累計數(shù)據(jù)達(dá)到某種程度后,表空間和索引空間的使用量就需要擴(kuò)容,需要的朋友可以參考下
    2023-07-07
  • Oracle如何編寫一個sqlldr實例

    Oracle如何編寫一個sqlldr實例

    這篇文章主要介紹了Oracle如何編寫一個sqlldr實例,SQL*Loader是oracle的高速批量數(shù)據(jù)加載工具,這是一個非常有用的工具,可用于從多種平面文件格式向Oracle數(shù)據(jù)庫中加載數(shù)據(jù)。SQLLDR可以在極短的時間內(nèi)加載數(shù)量龐大的數(shù)據(jù),需要的朋友可以參考下
    2023-07-07

最新評論