PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment convertir les requêtes hiérarchiques oracle en postgresql ?

Dans PostgreSQL, les requêtes récursives sont construites en spécifiant d'abord le initial ensemble de lignes (le terme non récursif , c'est-à-dire ceux au niveau racine ou final de la hiérarchie). Itérations suivantes (sur le terme récursif , la sous-requête après le UNION ALL ) puis ajoutez des lignes au jeu de résultats à partir des lignes restantes dans le jeu de lignes d'entrée jusqu'à ce qu'il n'y ait plus de lignes ajoutées.

Dans votre cas, la sous-requête initiale n'est pas filtrée, vous ajoutez donc simplement toutes les lignes lors de l'exécution initiale, ne laissant rien pour les exécutions suivantes.

Essayez ce qui suit :

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;