Oracle中只更新兩張表對應數據的方法
先建立一個結構一模一樣的表emp1,并為其插入部分數據
create table emp1 |
update掉emp1中的部分數據
update emp1 |
然后我們試著使用emp1中數據來更新emp中sal 和 comm這兩列數據。
我們可以這么寫
Update emp |
請你尤其注意這里的where子句,你可以嘗試不寫where子句來執行以下這句話,你將會使得emp中的很多值變成空。
這是因為在oracle的update語句中如果不寫where子句,oracle將會默認的把所有的值全部更新,即使你這里使用了子查詢并且某在值并不能在子查詢里找到,你就會想當然的以為,oracle或許將會跳過這些值吧,你錯了,oracle將會把該行的值更新為空。
我們還還可以這么寫:
update (select a.sal asal,b.sal bsal,a.comm acomm, b.comm bcomm from emp a,emp1 b where a.empno = b.empno) |
這里的表是一個類視圖。當然你執行時可能會遇到如下錯誤:
ERROR 位于第 2 行:
ORA-01779: 無法修改與非鍵值保存表對應的列
這是因為新建的表emp1還沒有主鍵的緣故
下面增加一個主鍵
alter table emp1 |
執行之后
在執行前面的語句就能成功。
這里我們總結一下:
在oracle中不存在update from結構,所以遇到需要從另外一個表來更新本表的值的問題的時候,有兩種解決的辦法:
一種是使用子查詢,使用子查詢時一定要注意where條件(一般后面接exists子句),除非兩個表是一一對應的,否則where條件必不可少,遺漏掉where條件時可能會導致插入大量空值。
另外一種是類視圖的更新方法,這也是oracle所獨有的。先把對應的數據全部抽取出來,然后更新表一樣更新數據,這里需要注意的是,必須保證表的數據唯一型。
【編輯推薦】