我有一个分层表,其中每一行都包含不同 parent 的 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);
最佳答案
基本上,如果它是节点本身、parent1、parent2、parent3 或 parent4,当您通过 id 查询节点时,它们都存在,那么您说的是 set active = true。因此,只需将它们放在一个数组中即可。
UPDATE
areas
SET
active = True
WHERE
id = ANY(
SELECT
UNNEST(ARRAY[id, parent1, parent2, parent3, parent4])
FROM
areas
WHERE
id = 1000
)
关于sql - Postgres : Combine update queries to one query on hierarchic table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176708/