天天看點

db2 update注意的問題

今天用db2 update 多條記錄,用到了下面的形式

update b   set   (ClientName)    =   (SELECT name FROM a WHERE b.id = a.id)

報了-811的錯誤。這裡要注意的是

b.id = a.id當a找不到記錄的id滿足這個條件時,傳回的是null,即會把b的id在a找不到對應id的記錄set為null,如果不能set為null的話就要加過where條件過濾

b.id = a.id當在a找到多條記錄是,就會報錯-811,這是可以用fetch first 1 rows only去掉報錯,但這是要注意這個update的結果可能不符合業務要求。因為在

a找到多條記錄,證明了name 可能有多個,這時隻是随機的拿了一個name 

db2 oracle 的文法是update set columnj=(select) where

sql server sybase的文法是update a set a.column=b.column from a,b where  (還可以是a連接配接b的形式,如a inner join b on a.id=b.id)

還有一種特别少見的update的文法是 update (select) set column=

db2

繼續閱讀