PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przekonwertować hierarchiczne zapytania Oracle do postgresql?

W PostgreSQL zapytania rekurencyjne są konstruowane przez określenie początkowego zestaw wierszy (termin nierekurencyjny , czyli tych na głównym lub ostatnim poziomie hierarchii). Kolejne iteracje (nad okresem rekurencyjnym , podzapytanie po UNION ALL ), a następnie dodaj wiersze do zestawu wyników z pozostałych wierszy w zestawie wejściowym dopóki nie zostaną dodane żadne wiersze.

W Twoim przypadku początkowe podzapytanie nie jest filtrowane, więc po prostu dodajesz wszystkie wiersze podczas pierwszego uruchomienia, nie pozostawiając nic na kolejne uruchomienia.

Wypróbuj następujące:

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsze rozwiązania wysokiej dostępności w klastrach PG dla PostgreSQL

  2. PostgreSQL:czy można podać niestandardową nazwę dla PRIMARY KEY lub UNIQUE?

  3. PostgreSQL zmienia kolejność zwracanych wierszy

  4. przestaw/krzyżuj różne dane wierszy do kolumn z postgresem

  5. Jak globalnie przedefiniować nextval w PostgreSQL?