Iseries SQL更新

时间:2016-06-29 13:59:31

标签: 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查询我需要将table1.column2更新为table2.column2,基于table2到column1和table1.column1记录

update Table1 a set a.Column2 = ( select b.Column2from Table2
b where A.column1= b.column1)

以上查询引发错误:

  

列或变量中不允许空值。

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

2 个答案:

答案 0 :(得分:2)

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

添加WHERE子句,仅更新table2中匹配的行。

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)

答案 1 :(得分:0)

除了@ 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