我想将下面提到的oracle分层查询转换为postgresql
SELECT catalog_id, sub_tree_id
FROM my_catalog
CONNECT BY PRIOR catalog_id = sub_tree_id;
我已经尝试使用以下postgresql查询,但未获得预期结果
WITH RECURSIVE q AS (
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
UNION ALL
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
JOIN q ON q.catalog_id=po.sub_tree_id
)
SELECT * FROM q;
ORACLE输出(预期结果)
POSTGRESQL输出(实际结果)
在PostgreSQL中,递归查询是通过首先指定初始行集(非递归项,即层次结构的根或最后一级的行)来构造的。随后的迭代(在递归项上,子查询之后UNION ALL
)然后从输入行集中的其余行向结果集中添加行,直到不再添加任何行为止。
对于您的情况,初始子查询是未过滤的,因此您只需在初始运行中添加所有行,而为后续运行保留任何内容。
请尝试以下方法:
WITH RECURSIVE q AS (
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
WHERE sub_tree_id = 0 -- this initially selects only "root" rows
UNION ALL
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
JOIN q ON q.catalog_id=po.sub_tree_id
)
SELECT * FROM q;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句