这对我来说是一个常见的 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)
有没有办法避免两个几乎相同的子查询?这个查询是一个明显的简化,但性能会受到影响,而且查询阅读起来也不必要地混乱。
我有一个声明,需要编写(使用通用名称,因为这是为了工作)来更新表'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使用的解决方案:)