PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да конвертирате йерархични заявки на 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на i18n данни с резервен език

  2. извикване на SQL функция в R функция

  3. Потребителски разрешения на PostgreSQL

  4. Upsert грешка (On Conflict Do Update), сочеща към дублиращи се ограничени стойности

  5. Postgresql SELECT, ако низът съдържа