相关疑难解决方法(0)

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

这对我来说是一个常见的 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)

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

sql informix

5
推荐指数
1
解决办法
866
查看次数

更新引用另一个表

我有一个声明,需要编写(使用通用名称,因为这是为了工作)来更新表'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使用的解决方案:)

sql informix sql-update

1
推荐指数
1
解决办法
6298
查看次数

标签 统计

informix ×2

sql ×2

sql-update ×1