PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como converter consultas hierárquicas oracle para postgresql?


No PostgreSQL, as consultas recursivas são construídas especificando primeiro o inicial conjunto de linhas (o termo não recursivo , ou seja, aqueles no nível raiz ou final da hierarquia). Iterações subsequentes (sobre o termo recursivo , a subconsulta após UNION ALL ) e adicione linhas ao conjunto de resultados das linhas restantes no conjunto de linhas de entrada até que não sejam adicionadas mais linhas.

No seu caso, a subconsulta inicial não é filtrada, então você simplesmente adiciona todas as linhas na execução inicial, não deixando nada para as execuções subsequentes.

Tente o seguinte:
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;