PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come convertire le query gerarchiche di Oracle in postgresql?

In PostgreSQL le query ricorsive vengono costruite specificando prima l'iniziale insieme di righe (il termine non ricorsivo , cioè quelli alla radice o al livello finale della gerarchia). Iterazioni successive (sul termine ricorsivo , la sottoquery dopo UNION ALL ) quindi aggiungi le righe al set di risultati dalle righe rimanenti nel set di righe di input fino a quando non vengono aggiunte altre righe.

Nel tuo caso, la sottoquery iniziale non è filtrata, quindi aggiungi semplicemente tutte le righe nell'esecuzione iniziale, senza lasciare nulla per le esecuzioni successive.

Prova quanto segue:

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;