sql >> Databáze >  >> RDS >> PostgreSQL

Rekurzivní dotaz SELECT pro návratovou rychlost libovolné hloubky?

Podle vašeho popisu by to mohlo být to, co hledáte:

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;

Rekurze se automaticky zastaví, jakmile horní uzel (parent_rate_plan_id IS NULL ) je dosaženo.

Efektivnější je připojit se k rate jednou poté, co shromáždíte všechny plány.

Příručka k (rekurzivním) CTE.




  1. Spusťte SERVERPROPERTY() proti propojenému serveru v SQL Server

  2. Brána PL/SQL v R11i

  3. Postgresql - Použití poddotazů s výrazy alter sekvence

  4. Zablokování MySQL s uloženou procedurou generující UID