Postgres:将更新查询合并到分层表上的一个查询



我有一个分层表,其中每行包含不同父项的 ID。 更新一行(将其设置为活动(意味着我必须更新该行的每个父级。 如何将这些查询合并到一个查询中? 目前我使用这个解决方案,这不是很好。我想这可以通过递归 CTE 来完成,但我在这里找不到正确的方法。提前感谢!

update areas set active = true  where id = 1000;
update areas set active = true  where id = (select parent1 from areas where id = 1000);
update areas set active = true  where id = (select parent2 from areas where id = 1000);
update areas set active = true  where id = (select parent3 from areas where id = 1000);
update areas set active = true  where id = (select parent4 from areas where id = 1000);

基本上,你说 set active = true,如果它是节点本身,parent1、parent2、parent3 或 parent4,当你通过 id 查询节点时,它们都存在。因此,将它们放在一个数组中就是您所需要的。

UPDATE
areas
SET
active = True
WHERE
id = ANY(
SELECT
UNNEST(ARRAY[id, parent1, parent2, parent3, parent4])
FROM
areas
WHERE
id = 1000
)

最新更新