unw*_*ing 1 sql informix sql-update
我有一个声明,需要编写(使用通用名称,因为这是为了工作)来更新表'tUpd'中的列'updCol'.tUpd还有一个列'linkCol',它存在于另一个表中.还有另一栏'idCol'.
我的问题是更新tUpd中行的updCol值,这些行通过linkCol对应于具有给定idCol值的行.
我认为应该解决的一个解决方案如下:
update
tUpd
set
updCol = XXX
where exists (
select
idCol
from
tOther
where
tOther.linkCol = tUpd.linkCol
and tOther.idCol = MY_ID
)
Run Code Online (Sandbox Code Playgroud)
但是,我担心这种方法会导致性能不佳,因为我之前已经警告过与性能相关的子查询 - 这个子查询将为tUpd的每一行运行一次,这是正确的吗?
有人有更好的建议吗?
重要更新:我的工作场所不惜一切代价避免使用SQL JOIN,而更喜欢在where子句中使用,例如,where a.col = b.col.这可能相当尴尬,但允许我特别是日志记录的灵活性,我不完全理解.所以,我正在寻找非JOIN使用的解决方案:)
小智 6
所有上述解决方案都会在Informix中出现错误,因为它无法找到表中的一个.这是一个适合我的解决方案:
update table1
set table1.field2 = (select table2.field2 from table2 where table1.field1 = table2.field1)
where table1.field1 in (select table2.field1 from table2)
Run Code Online (Sandbox Code Playgroud)
编辑:来自另一个问题的多列解决方案
update table1
set (table1.field2, table2.field3) = (
(select table2.field2, table2.field3
from table2
where table1.field1 = table2.field1)
)
where table1.field1 in (select table2.field1 from table2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6298 次 |
| 最近记录: |