oracle中 merge into 的用法
阿新 • • 發佈:2017-09-18
大數據 char 條件 http -1 alt mat 一個表 dml語句
很多時候我們需要通過篩選條件同時對表進行 更新,插入,刪除 等操作。這樣如果我們單一的去操作表會顯得很麻煩,下面會說到這個merge into 的用法會極大的優化我們操作表的時間和代碼量。
舉例,先新建2個表:
create table book( id number, name varchar(64), price number, primary key(id) ) create table pbook as select * from book delete pbook
這裏create table A as (select....) 不熟悉的人可以記一下,以後可以常用,相當於備份一個表,既有表結構也有數據。分別插入不同的數據,如下
現在我們對表book (下面稱a表)進行操作, 需要同時更新a表價格為0的數據,插入 a表沒有的數據,且通過條件過濾掉b表的價格大於1000的數據的極大數據。
merge into book a using pbook b on (a.id=b.id) when matched then update set a.price=b.price*0.8 where a.price=0 delete where (b.price>1000) when not matched then insert (a.id,a.name,a.price) values (b.id,b.name,b.price);
說明:when matched then 是判斷條件,即如果a表中 a.price沒有等於0的就不會去執行更新語句了,後面的delete where 也是在更新中過濾某些數據。沒有則可以不加
a表結果如下:
該語句做到了:1、刪除id=1的數據,2、更新了2,3的數據。3、插入了4,5兩條新數據。4、id為4的數據不變
merge into是dml語句,需要進行rollback和commit 結束事物
發現:經測試插入數據順序為無序(沒有規律,如有人發現規律請指教)。
oracle中 merge into 的用法