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

Rekurencyjne zapytanie SELECT do zwracania stawek o dowolnej głębokości?

To może być to, czego szukasz, zgodnie z Twoim opisem:

WITH RECURSIVE cte AS (
   SELECT id, parent_rate_plan_id
   FROM   rate_plan  
   WHERE  id = ${user rate plan ID} 

   UNION ALL
   SELECT rp.id, rp.parent_rate_plan_id
   FROM   cte
   JOIN   rate_plan rp ON rp.id = cte.parent_rate_plan_id
   )
SELECT *
FROM   cte
JOIN   rate r ON r.rate_plan_id = cte.id
ODER   BY length(prefix) DESC
LIMIT  1;

Rekursja zatrzymuje się automatycznie, gdy tylko górny węzeł (parent_rate_plan_id IS NULL ) został osiągnięty.

Bardziej efektywne jest dołączenie do rate raz po zebraniu wszystkich planów.

Podręcznik dotyczący (rekurencyjnych) CTE.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wyzwalacze powiązane z widokiem lub tabelą w PostgreSQL?

  2. PostgreSQL sprawdza, czy pole znacznika czasu jest puste

  3. PostgreSQL unescape string JSON

  4. Niekompatybilność Openshift i net-ssh? (2.9.3-beta1 vs 2.9.2)

  5. Jak Now() działa w PostgreSQL