刪除a表中和b表相同的資料

來源:互聯網
上載者:User
資料
刪除a表中和b表相同的資料
 
軟體環境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安裝路徑為:C:ORANT
問題提出:
在做資料轉儲業務的時候,如果發生操作錯誤,有可能出現主表和副表中都有同一種資料,這樣結算的結果就有可能發生錯誤。


實現方法:
SQL> create table a (
2 bm char(4), --編碼
3 mc varchar2(20) --名稱
4 )
5 /
表已建立.
SQL> insert into a values('1111','1111');
SQL> insert into a values('1112','1111');
SQL> insert into a values('1113','1111');
SQL> insert into a values('1114','1111');
SQL> insert into a values('1115','1111');
SQL> create table b as select * from a where 1=2;
表已建立.
SQL> insert into b values('1111','1111');
SQL> insert into b values('1112','1111');
SQL> insert into b values('1113','1111');
SQL> insert into b values('1114','1111');
SQL> commit;
完全提交.
SQL> select * from a;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111
1115 1111
SQL> select * from b;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111

方法一:exists子句
SQL> delete from a where exists (select 'X' from b where a.bm=b.bm and a.mc=b.mc);
刪除4個記錄.
where條件:如果兩個表中都擁有相同欄位的主鍵(primary key),則只需比較兩個主鍵就可以了
方法二:in子句
SQL> delete from a where (bm,mc) in (select bm,mc from b);
刪除4個記錄.
SQL> select * from a;
BM MC
---- --------------------
1115 1111
實際測試結論:
在表不是很大時,用in子句速度還可以忍受,而如果記錄量很多時(十萬條以上),in子句簡直讓人難以人忍受,速度奇慢。


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。