递归SELECT查询返回任意深度的速率?

亚历克斯·巴拉索夫(Alex Balashov)

这是我第一次尝试递归SQL查询以向上遍历N个父子关系,但我不知道从哪里开始。任何帮助,将不胜感激。

场景是我有两个表-raterate_plan费率属于应用于用户的费率计划。

CREATE TERM rate_plan (
   id                  integer PRIMARY KEY NOT NULL
                       DEFAULT nextval('rate_plan_id'),

   descr               varchar(64) NOT NULL,

   parent_rate_plan_id integer NOT NULL REFERENCES rate_plan(id)
);

CREATE TABLE rate (
   id                integer PRIMARY KEY NOT NULL
                     DEFAULT nextval('rate_id'),

   prefix            varchar(24) NOT NULL,

   rate_plan_id      integer NOT NULL 
                     REFERENCES rate_plan(id)
);

获取费率的典型查询:

SELECT * FROM rate  
   WHERE (
      rate_plan_id = ${user rate plan ID} 
      AND prefix = ${prefix}
   )
   ORDER BY LENGTH(prefix) ASC;

我想要的是返回最具体的(LENGTH()-iest前缀)费率,但不限于${user rate plan ID},而是从与rate_plan.parent_rate_plan_id层次结构中任意数量的费率计划相关的费率中选择费率递归应该在何时到达最低点rate_plan.parent_rate_plan_id = NULL

我只想做一个JOIN,但我需要容纳N个亲子关系,而不仅仅是两个。

这是在PostgreSQL 9.x上。我尝试了WITH RECURSIVEand UNION ALL,加入rate_planrate每种方法,SELECT并尝试按父级进行过滤,但由于对这些构造如何工作的理解不足,因此一无所获。

欧文·布兰德斯特

根据您的描述,这可能是您要寻找的:

最具体的(LENGTH()-iest前缀)费率,但不仅限于${user rate plan ID},而是从关联的费用中选择费率

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手册。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有子图聚合的递归查询(任意深度)

来自分类Dev

深度优先搜索,递归,For循环和返回

来自分类Dev

Haskell:以递归方式处理任意深度嵌套的列表

来自分类Dev

Mysql中的递归SELECT查询?

来自分类Dev

密码查询以收集任意深度节点和边缘属性

来自分类Dev

函数要么返回None要么说“超出最大递归深度”

来自分类Dev

为什么在按分号程序后又返回深度递归?

来自分类Dev

Javascript:递归问题->返回深度嵌套对象中最长的键值

来自分类Dev

具有未知值深度的递归函数。返回所有值(未定义深度)

来自分类Dev

SQLite递归查询返回文件路径

来自分类Dev

LINQ递归查询以返回组的分层集

来自分类Dev

select *的递归查询引发ORA-01789

来自分类Dev

任意深度的通配符

来自分类Dev

任意深度嵌套循环

来自分类Dev

$ wpdb SELECT查询返回COUNT?

来自分类Dev

执行 SELECT 查询返回 false

来自分类Dev

递归深度比较

来自分类Dev

QuickSort估算递归深度

来自分类Dev

超过最大递归深度

来自分类Dev

避免最大递归深度

来自分类Dev

Python最大递归深度

来自分类Dev

烧瓶最大递归深度

来自分类Dev

递归深度比较

来自分类Dev

在MongoDB中按字段查询,可以在文档中任意深度嵌套

来自分类Dev

PostgreSQL-返回多个任意子查询的结果

来自分类Dev

requestAnimationFrame:返回帧速率的说明

来自分类Dev

SQLAlchemy递归CTE查询不返回非列成员吗?

来自分类Dev

递归查询使用初始查询中返回的日期作为后续查询中的限制

来自分类Dev

如何在MySQL Select查询中使用递归