更新引用另一个表

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)