去重複記錄

-- 穿件 PERSON 表
create table PERSON
(
  p_id      NUMBER not null,
  p_name    NVARCHAR2(50),
  p_cardid  NVARCHAR2(50),
  p_address NVARCHAR2(100)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns
comment on column PERSON.p_id
  is '人員表ID';
comment on column PERSON.p_name
  is '人員表姓名';
comment on column PERSON.p_cardid
  is '人員表身份證號';
comment on column PERSON.p_address
  is '人員表地址';
-- Create/Recreate primary, unique and foreign key constraints
alter table PERSON
  add constraint P_ID_PRIMARY primary key (P_ID)
  using index
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

Select t.*, t.Rowid From Person t;
----1、往PERSON表插入數據----

Insert Into Person Values (6, 'Tom', '130132198902045358', '北京市海淀區長春橋路五號新起點嘉園4號樓906室');
Insert Into Person Values (7, 'jerry', '130132198905085469', '北京市、海淀區、蘇州街、3號、大恆科技大廈1008');
Insert Into Person Values (8, 'jerry', '130132198905085469', '北京市、海淀區、蘇州街、3號、大恆科技大廈1008');

----2、SQL查詢PERSON表重複記錄---------

Select P1.*
From Person P1, Person P2
Where P1.p_Id <> P2.p_Id And P1.p_Cardid = P2.p_Cardid And P1.p_Name = P2.p_Name And P1.p_Address = P2.p_Address;

----刪除重複記錄的SQL語句----

----1.用rowid方法----

----2.用group by方法----

----3.用distinct方法----

----1。用rowid方法----

----據據oracle帶的rowid屬性,進行判斷,是否存在重複,語句如下:----

----查數據: ----

Select *
From Person a
Where Rowid != (Select Max(Rowid)
        From Person b
        Where a.p_Cardid = b.p_Cardid And a.p_Name = b.p_Name And a.p_Address = b.p_Address);
----刪數據:----

Delete From Person a
Where Rowid != (Select Max(Rowid)
        From Person b
        Where a.p_Cardid = b.p_Cardid And a.p_Name = b.p_Name And a.p_Address = b.p_Address);

----2.group by方法----

----查數據:----

Select Count(p_Cardid), Max(p_Name)
From Person                      --列出重複的記錄數,並列出他的name屬性
Group By p_Cardid
Having Count(p_Cardid) > 1;     --按num分組後找出表中num列重複,即出現次數大於一次

----刪數據:----

DELETE  from Person
 group by p_Cardid 
 having count(p_Cardid ) >1

----這樣的話就把所有重複的都刪除了。----

----3.用distinct方法 -對於小的表比較有用----

create table Person_new as   select distinct *   from Person minux
truncate table Person;
insert into Person select * from Person_new;


----查詢及刪除重複記錄的方法大全----

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

select * from Person
where p_Cardid in (select  p_Cardid  from  Person  group  by  p_Cardid  having  count(p_Cardid) > 1)

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

delete from Person
where p_Cardid  in (select  p_Cardid  from Person  group  by  p_Cardid   having  count(p_Cardid) > 1)
and rowid not in (select min(rowid) from  Person  group by p_Cardid  having count(p_Cardid )>1)

----3、查找表中多餘的重複記錄(多個字段)----

select * from Person a
where (a.p_Cardid,a.p_Name) in  (select p_Cardid,p_Name from Person group by p_Cardid,p_Name  having count(*) > 1)

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

DELETE * from Person a
where (a.p_Cardid,a.p_Name) in  (select p_Cardid,p_Name from Person group by p_Cardid,p_Name having count(*) > 1)
and rowid not in (select min(rowid) from Person group by p_Cardid,p_Name having count(*)>1)

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

select * from Person a
where (a.p_Cardid,a.p_Name) in  (select p_Cardid,p_Name from Person group by p_Cardid,p_Name having count(*) > 1)
and rowid not in (select min(rowid) from Person group by p_Cardid,p_Name having count(*)>1)

----(二) 比方說 在A表中存在一個字段“name”,----
----而且不同記錄之間的“name”值有可能會相同,----
----現在就是需要查詢出在該表中的各記錄之間,“name”值存在重複的項;----

Select p_Name,Count(*) From Person Group By p_Name Having Count(*) > 1

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

Select p_Cardid,p_Name,Count(*) From Person Group By p_Cardid,p_Name Having Count(*) > 1

----方法二----

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

----1、對於第一種重複,比較容易解決,使用----

select distinct * from Person

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

 

 

 

 

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章