PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rekursive SELECT-Abfrage, um Raten beliebiger Tiefe zurückzugeben?

Dies könnte laut Ihrer Beschreibung das sein, wonach Sie suchen:

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;

Die Rekursion stoppt automatisch, sobald der oberste Knoten (parent_rate_plan_id IS NULL ) erreicht ist.

Es ist effektiver, sich rate anzuschließen einmal, nachdem Sie alle Pläne gesammelt haben.

Das Handbuch zu (rekursiven) CTEs.