2016-06-29 45 views
1

表1iSeries的SQL更新

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查詢我需要根據表2,以更新是table2.column2 table1.column2到COLUMN1和table1.column1記錄

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

上述查詢引發錯誤:

Null values not allowed in column or variable.

我試圖在2個不同的系統之間複製數據。

+0

顯示我們預期的結果了。 (但爲什麼你將這些類似的數據存儲在兩個表中,爲什麼要複製數據?) – jarlh

+0

執行上面的查詢結果「空值不允許在列或變量」..我試圖從2個不同的系統複製數據。 –

+0

給出的示例數據[DDL被忽略,但相當相關],不會產生聲稱已被看到的錯誤;而不是那個錯誤-407又名SQL0407「在列或變量COLUMN2中不允許使用空值」,結果將是sqlcode = -811又名SQL0811「SELECT多於一行的結果」。糾正OP以提供示例數據的更正[可能還需要添加DDL]以顯示聲稱出現的錯誤。或者也可以改爲澄清究竟是什麼問題。 – CRPence

回答

2

似乎有沒有任何匹配的table2行table1行。在這種情況下,子查詢返回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) 
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