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)

有什么办法可以避免两个几乎相同的子查询?这个查询是一个明显的简化,但性能会受到影响并且查询是不必要的混乱阅读。

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

try this:

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