1. 程式人生 > >oracle查詢重複資料方法

oracle查詢重複資料方法

SQL重複記錄查詢方法

2008年08月14日 星期四 21:01

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
)

相關推薦

oracle查詢重複資料方法

SQL重複記錄查詢方法 2008年08月14日 星期四 21:01 SQL重複記錄查詢 1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷select * from people where peopleId in (select   peopl

oracle查詢重複資料出現次數

話不多數上程式碼:   我在Oracle資料庫查資料,發現重複資料,於是我想把重複條數以及具體資料查出來:     下面是資料      然後我需要知道重複多少條 (重複十條,也就是有五條資料相同)   SQL: select COUNT(*) from acsprd.parameters_

oracle 查詢重複資料並且刪除, 只保留一條資料的SQL語句

delete from t_account where feedate in (   select feedate           from t_account   group by feeda

Oracle查詢重複資料並刪除,只保留一條記錄

前言專案中,在“資源目錄-線上編目”中,資源項子表存在多條重發資料,需要進行資料清理,刪除重發的資料,最終只保留一條相同的資料。操作的表名:R_RESOURCE_DETAILS操作步驟一、重複記錄根據單

oracle去除重複資料常用的方法

建立測試資料 create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 select 1, 2, 3 fro

mysql查詢表裡的重複資料方法

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11')   delete from hk_test where username=

ORACLE刪除重複資料的一種高效的方法

刪除重複資料的一種高效的方法 表demo是重複拷貝自dba_objects,有88萬左右,不重複的是27323,沒有索引 方法一:delete   from   demo   a   where   a.rowid   <>   (select   max(

oracle重複資料的處理方法

1。DISTINCT 方法就不必說了,大家都清楚。(主要是我用不上,用了下面的方法) 2。通過查詢方法來取得不重複資料 -- 根據去重複的欄位來查詢資料的第一個ID進行匹配 select * from FM_COALBLENDING_QUALITY where hea

查詢重複資料(某個欄位允許指定範圍內偏移)

前一段時間遇到一個問題,要求在pg資料庫環境下編寫一個sql,實現相同記錄在不同商家的查詢規則,因為相對於商家來說有些在a商店購入的記錄會在b商店顯示為賣出,而且交易的時間有時也不會完全一樣,針對這樣的情況,我嘗試了許多次但都不能使用一個sql來實現,遂使用了臨時表的方式來進行多次查詢操作:

pg資料庫查詢重複資料並可識別空資料重複(二)--優化

在上一篇文章中,實現了查詢重複資料與刪除多餘重複資料的sql編寫:http://blog.csdn.net/u011099093/article/details/78596034; 但是經過匯入百萬資料測試,查詢語句直接卡住沒有結果,於是又花了一天時間對sql進行優化,在借鑑瞭如下地址的方法

pg資料庫查詢重複資料並可識別空資料重複

根據多個欄位查詢重複資料:SELECT A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1 即可,但是現在的需求是: 最終查詢的欄位多於分組欄位,且同一欄位的空值也視為重複。在網上查詢了很多資料,

Oracle刪除重複資料並且只留其中一條資料

資料庫操作中,經常會因為導資料造成資料重複,需要進行資料清理,去掉冗餘的資料,只保留正確的資料 一:重複資料根據單個欄位進行判斷 1、首先,查詢表中多餘的資料,由關鍵欄位(name)來查詢。 select * from   table_name  where name in (sel

sqlserver 查詢重複資料

1 use StudentManageDB 2 go 3 insert into ScoreList (StudentId,CSharp,SQLServerDB)values(100006,52,80) 4 insert into ScoreList (StudentId,CSharp,SQLS

Oracle 刪除重複資料只留一條

查詢及刪除重複記錄的SQL語句 1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(Id)來判斷 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、刪除

oracle 刪除重複資料 保留rowid 最小的行

舉個例子:     這要刪除 id 重複的行,只保留最小的 sql 語句就是: delete from table_name t1 where rowid not in(        select min(rowid

oracle查詢中文資料為亂碼 特殊字元亂碼

  oracle查詢中文資料為亂碼 2018年08月02日 11:22:32 zhbzhbzhbbaby 閱讀數:271 亂碼的問題,都知道是字符集的問題,需要檢視資料庫伺服器的字符集和客戶端的字符集   oracle資料庫的字符集更改&n

oracle重複資料並顯示出來

一。查詢重複記錄 1。查詢全部重複記錄 Select * From 表 Where 重複欄位 In (Select 重複欄位 From 表 Group By 重複欄位 Having Count(*)>1) 2。過濾重複記錄(只顯示一條) Select *

oracle查詢重複記錄,去除重複記錄

轉載自http://blog.163.com/aner_rui/blog/static/12131232820105901451809/ SELECT * FROM t_info a WHERE ((SELECT COUNT(*)           FROM t_i

Sql 查詢重複資料資訊

select *,count(*) as count fromtable_name group by old_id having count>1;  table_name : 表名 old_id : 表示重複欄位; 根據多個欄位刪除重複資料 DELETE

mysql查詢重複資料只保留一條記錄

比如我直接select * from movie where name="功夫";有三條資料,但我只希望拿到其中任意一條就行了。可以使用group by 分組因為name是一樣的,所以分組也就是隻有一組