2016-06-29 2 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 

、COLUMN1とtable1.column1レコードへtable2のに基づいて、私はtable2.column2とtable1.column2を更新する必要がSQLクエリを使用して

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

を使用することができ、あまりにも私たちに期待される結果を表示します。 (しかし、なぜそのような類似のデータを2つのテーブルに保存するのですか?そして、なぜデータをコピーするのですか?) – jarlh

+0

上記のクエリ結果を実行した後で "カラム値または変数にNULL値は許されません" ..私は2つの異なるシステムからデータをコピーしようとしています。 –

+0

与えられた[DDLが省略されたが、かなり関連性がある]データ例は、見たと主張されているエラーを生成しませんでした。そのエラーの代わりに-407 aka SQL0407 "NULL値が列または変数COLUMN2に許可されていません。"とすると、結果はsqlcode = -811 aka SQL0811 "2行以上のSELECTの結果"でした。 OPデータを修正して、DDLを追加するだけで、見た目のエラーを表示することができます。あるいは、代わりに\何が問題であるかを明確にするために変更するかもしれません。 – CRPence

答えて

2

テーブル1の行があり、テーブル2の行が一致していないようです。この場合、サブクエリはNULLを返します。そして、私はtable1.column2がNULLを許可しないと思いますか?

WHERE句を追加すると、table2で一致する行のみが更新されます。 @ jarihの答えに加えて

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

..

ごすなわち、現在サポートされているリリース、オンの場合。 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