5

これは私にとって一般的な SQL クエリです。

update table1 set col1 = (select col1 from table2 where table1.ID = table2.ID)
where exists (select 1 from table2 where table1.ID = table2.ID)

2 つのほぼ同一のサブクエリを回避する方法はありますか? このクエリは明らかに単純化されていますが、パフォーマンスが低下し、クエリが不必要に読みにくくなっています。

4

3 に答える 3

5

残念ながら、Informix は UPDATE ステートメントでの FROM 句をサポートしていません。回避策としてより良い結果 (パフォーマンス) を得る方法は、UPDATE ステートメントを MERGE ステートメントに変更することです。

これは、データベースがバージョン 11.50 以降の場合にのみ機能します

MERGE INTO table1 as t1
USING table2 as t2
   ON t1.ID = t2.ID
WHEN MATCHED THEN UPDATE set (t1.col1, t1.col2) = (t2.col1, t2.col2);

詳細については、 IBM Informix のマニュアルを参照してください。

于 2013-09-26T11:42:48.403 に答える
0

内部結合による更新を使用して、サブクエリを回避できます

このようなもの:

update t1 
set col1 = t2.col1
from table1 t1
inner join table2 t2
on t1.ID = t2.ID
于 2013-09-25T12:35:39.570 に答える
-1

これを試して:

 update table1 set col1 = (select col1 as newcol from table2 where table1.ID = table2.ID)
where exists (newcol)
于 2013-09-25T12:23:14.647 に答える