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

Рекурсивна SELECT заявка за връщане на скорости с произволна дълбочина?

Това може да е това, което търсите, според вашето описание:

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;

Рекурсията спира автоматично веднага щом горният възел (parent_rate_plan_id IS NULL ) е достигнато.

По-ефективно е да се присъедините към rate веднъж, след като сте събрали всички планове.

Ръководството за (рекурсивни) 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. Как да изхвърлите структурата на базата данни на PostgreSQL (всеки обект в отделен файл)

  2. Използвайте двоична таблица COPY FROM с psycopg2

  3. Цикъл върху таблици с PL/pgSQL в Postgres 9.0+

  4. Проблеми при свързването на Pentaho Kettle/Spoon към Heroku PostgreSQL чрез SSL

  5. Вмъкнете данни в Postgresql с дублирани стойности