如何将 oracle 分层查询转换为 postgresql?
How to convert oracle hierarchical queries to postgresql?
我想将下面提到的 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;
我想将下面提到的 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;