使用 H2 中 CTE 的结果集进行更新

Posted

技术标签:

【中文标题】使用 H2 中 CTE 的结果集进行更新【英文标题】:update using the resultset from CTE in H2 【发布时间】:2019-10-21 12:22:46 【问题描述】:

我正在尝试使用 CTE 的结果集更新表。参考this question

如果table_b是这样的CTE结果,查询是否有效

With table_b as (select a_id from table_x)
update table_a a
set a.b_id = (select b.id from table_b b where b.a_id = a.id)
where a.id = (select b.a_id from table_b b where b.a_id = a.id)

【问题讨论】:

【参考方案1】:

id也需要选择,否则b.id将找不到。

with table_b as (select id, a_id from table_x)
update table_a a
set a.b_id = (select b.id from table_b b where b.a_id = a.id)
where a.id = (select b.a_id from table_b b where b.a_id = a.id)

您还应该考虑使用MERGE 命令而不是UPDATE,它可能更有效。

with table_b as (select id, a_id from table_x)
merge into table_a using table_b on table_a.id = table_b.a_id
when matched then update set b_id = table_b.id;

【讨论】:

以上是关于使用 H2 中 CTE 的结果集进行更新的主要内容,如果未能解决你的问题,请参考以下文章

DML增强功能-CTE

Sql Server 公用表达式(CTE)

T-SQL 公用表表达式(CTE)

T-SQL 之 公用表表达式(CTE)

sql server使用cte递归查询获取树形的父节点/子节点

如何引用一个 CTE 两次?