Iseries SQL更新

Iseries SQL更新,sql,db2-400,Sql,Db2 400,表1 Column1 Column2 aa 12 bb 12 cc 12 aa 12 bb 12 表2 Column1 Column2 aa 12 bb 13 cc 14 aa 15 bb 16 现在,使用Sql查询,我需要根据table2将table1.column2更新为table2.column2,并将其更新为column1

表1

Column1  Column2
aa         12
bb         12
cc         12
aa         12
bb         12
表2

Column1  Column2
aa         12
bb         13
cc         14
aa         15
bb         16
现在,使用Sql查询,我需要根据table2将table1.column2更新为table2.column2,并将其更新为column1和table1.column1记录

update Table1 a set a.Column2 = ( select b.Column2from Table2
b where A.column1= b.column1)
上述查询引发错误:

列或变量中不允许有空值


我正在尝试在两个不同的系统之间复制数据。

似乎有table1行没有任何匹配的table2行。在这种情况下,子查询返回NULL。我猜table1.column2不允许空值

添加
WHERE
子句以仅更新表2中具有匹配项的行

update Table1 a set a.Column2 = (select b.Column2 from Table2 b
                                 where A.column1= b.column1)
where exists (select 1 from Table2 b2
              where A.column1= b2.column1)

除了@jarih的回答

如果您的应用程序在当前受支持的版本(即7.1或更高版本)上

您可以使用
MERGE

merge into table1 A
using (select column1, column2 from table2) as B
on a.column1 = b.column1
when matched then
 update set a.column2 = b.column2

也给我们展示一下预期的结果。(但为什么要将如此相似的数据存储在两个表中?为什么要复制数据?)在执行上述查询结果“列或变量中不允许有空值”之后。我正在尝试从两个不同的系统复制数据。给出的示例数据[省略了DDL,但非常相关],不会产生声称已看到的错误;与错误-407 aka SQL0407“列或变量COLUMN2中不允许出现空值”不同,其效果是sqlcode=-811 aka SQL0811“选择多行的结果”。更正OP以提供对示例数据的更正[还可以添加DDL]以显示声称看到的错误。或者也可以改为澄清到底是什么问题。