在更新中使用子查询总是需要where子句中的子查询?

时间:2013-09-25 12:13:32

标签: sql informix

这是我常见的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)

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

3 个答案:

答案 0 :(得分:4)

不幸的是,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 manual以获取更多信息

答案 1 :(得分:0)

使用内部联接更新可用于避免子查询

类似的东西:

update t1 
set col1 = t2.col1
from table1 t1
inner join table2 t2
on t1.ID = t2.ID

答案 2 :(得分:-1)

试试这个:

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