今天用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=