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

Nez*_*eli 5 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)
Run Code Online (Sandbox Code Playgroud)

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

cei*_*art 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);
Run Code Online (Sandbox Code Playgroud)

查看IBM Informix 手册以获取更多信息