rou*_*ble 5 sql database informix subquery sql-update
我在UPDATE中使用子查询:
UPDATE tableA
SET x,y,z = ( (SELECT x, y, z
FROM tableB b
WHERE tableA.id = b.id
AND (tableA.x != b.x
OR tableA.y != b.y
OR tableA.z != b.z))) );
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果子查询没有返回任何行会发生什么?它会用null做更新吗?
其次,有没有更好的方法来写这个.我基本上从tableB更新tableA中的三个字段,但只有当三个字段中的任何一个不同时才会发生更新.
如果子查询没有返回任何行,会发生什么?它会用null做更新吗?
是的 - 你可以测试这个:
update YourTable
set col1 = (select 1 where 1=0)
Run Code Online (Sandbox Code Playgroud)
这将用cols填充col1.如果子查询返回多行,例如:
update YourTable
set col1 = (select 1 union select 2)
Run Code Online (Sandbox Code Playgroud)
数据库将生成错误.
其次,有没有更好的方法来写这个.我基本上从tableB更新tableA中的三个字段,但只有当三个字段中的任何一个不同时才会发生更新.
直观地说,我不担心性能.如果您真的希望避免更新,可以像下面这样写:
UPDATE a
SET x = b.x, y = b.y, z = b.z
FROM tableA a, tableB b
WHERE a.id = b.id AND (a.x <> b.x OR a.y <> b.y OR a.z <> b.z)
Run Code Online (Sandbox Code Playgroud)
该WHERE
子句阻止使用NULL进行更新.
归档时间: |
|
查看次数: |
3331 次 |
最近记录: |