sql >> Database teknologi >  >> RDS >> PostgreSQL

Rekursiv SELECT-forespørgsel for at returnere rater af vilkårlig dybde?

Dette kan være, hvad du leder efter, ifølge din beskrivelse:

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;

Rekursionen stopper automatisk, så snart den øverste node (parent_rate_plan_id IS NULL ) er nået.

Det er mere effektivt at deltage for at rate én gang efter du har samlet alle planer.

Manualen om (rekursive) CTE'er.




  1. Sådan har du dynamisk SQL i MySQL Stored Procedure

  2. Skift mysql tidszone fra phpMyAdmin

  3. hvordan forbinder man to tabeller om almindelige attributter i mysql og php?

  4. T-Sql ser ud til at evaluere If-sætningen, selv når betingelsen ikke er sand