2013年6月25日 星期二

Oracle - Update 不可以用 Join ?


總之就是以前在 SQL Server 上面寫的方式不能用了 @@"
以前都是這樣寫的(印象中)...

update a
set a.co = nvl(b.co, 'not found')
from table_a a

left join table_b b on a.id = b.id

但是在 Oracle 不可以這樣寫,會有錯誤 ╮(╯3╰)╭
估狗了一下是說有兩種方式可以處理,
一個是用子查詢的方式,另一種是用 View 的方式,
子查詢遇到資料量大的時候效能會變成笑能,所以~~~OUT!!!
修改成 View 的結果如下:

update (
select nvl(b.co, 'not found') as b_co, a.co
from table_a a
left join table_b b on a.id = b.id
)

set co = b_co

其實也沒有比較麻煩,
只是把原來的 Select 用 Update 包起來而已。

參考:Einzig Mir: Oracle SQL使用兩個Table進行Update的方法

3 則留言:

  1. m.co,請問一下m是甚麼?

    回覆刪除
  2. 感謝分享... 我剛剛試了一下我的oracle 資料庫發現要用以下script才能:
    update xxtest_a a set a.co = (select b.co from xxtest_b b where b.id = a.id)
    分享給您

    回覆刪除