1. 程式人生 > >Oracle資料庫中刪除兩表中相同資料

Oracle資料庫中刪除兩表中相同資料

--問題提出:
--1、在做資料轉儲業務的時候,如果發生操作錯誤,有可能出現主表和副表中都有同一種資料,
--這樣結算的結果就有可能發生錯誤。

--實現方法:
--建表a
create table a (  bm char(4), mc varchar2(20));

--插入a表資料
insert into a values('1111', '1111');
insert into a values('1112', '1111');
insert into a values('1113', '1111');
insert into a values('1114', '1111');
insert into a values('1115','1111');

--建表b(where 1=2只要表結構,不要資料)
create table b
as
select * from a where 1=2;
--插入與a表相同的資料
insert into b values('1111','1111');
insert into b values('1112','1111');
insert into b values('1113','1111');
insert into b values('1114','1111');

select *from a
select* from b

delete from a
delete from b

drop table a
drop table b
--方法一
--exists子句:
delete from a where exists (select 1 from b where a.bm=b.bm and a.mc=b.mc);
--刪除4個記錄。
--where條件:如果兩個表中都擁有相同欄位的主鍵(primary key),則只需比較兩個主鍵就可以了。

--方法二
--in子句:
delete from a where (bm,mc) in (select bm,mc from b);
--實際測試結論

--在表不是很大時,用in子句速度還可以忍受,而如果記錄量很多時(十萬條以上),in子句速度很慢。