一尘不染

使用with子句更新语句

sql

我有一个脚本,该脚本使用一堆with子句得出一些结果,然后将结果写到表中。我只是无法理解,有人可以指出我正确的方向吗?

这是一个简化的示例,指示我要执行的操作:

with comp as (
  select *, 42 as ComputedValue from mytable where id = 1
)
update  t
set     SomeColumn = c.ComputedValue
from    mytable t
        inner join comp c on t.id = c.id

真实的东西有很多with子句都相互引用,因此实际使用with子句的任何建议都比将其重构为嵌套子查询更可取。

提前致谢,

格特·简


阅读 171

收藏
2021-03-17

共1个答案

一尘不染

如果有人跟随我来,这就是对我有用的答案。

注意:请先阅读注释,然后再使用此注释,此操作尚不完整。 我可以给出的更新查询的最佳建议是切换到SqlServer;)

update mytable t
set z = (
  with comp as (
    select b.*, 42 as computed 
    from mytable t 
    where bs_id = 1
  )
  select c.computed
  from  comp c
  where c.id = t.id
)

祝你好运,

GJ

2021-03-17