用于获取存储在单个表中的n级父子关系的Postgresql查询

用于获取存储在单个表中的n级父子关系的Postgresql查询,第1张

概述我有一张表示亲子关系的表.关系可以深入n级. 我已经使用以下查询创建了一个示例表: CREATE SEQUENCE relations_rel_id_seq INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1;CREATE TABLE relations( rel_id bigint DEFAULT nextval 我有一张表示亲子关系的表.关系可以深入n级.

我已经使用以下查询创建了一个示例表:

CREATE SEQUENCE relations_rel_ID_seq    INCREMENT BY 1    NO MAXVALUE    NO MINVALUE    CACHE 1;CREATE table relations(    rel_ID bigint DEFAulT nextval('relations_rel_ID_seq'::regclass) NOT NulL PRIMARY KEY,rel_name text,rel_display text,rel_parent bigint);

SQLFiddle

我需要查询表并分层显示父子关系.我仍然不了解如何使用SQL查询查询n级深度.

对于sqlfiddle,例如,输出的预期层次结构:

rel1    rel11        rel111        rel112            rel1121rel2    rel21        rel211        rel212

N.B:n级中的值n是未知的.

数据库设计:

Is there any better way such a relation can be expressed in the
database for easy querying.?

使用Postgres可以使用递归公用表表达式:
with recursive rel_tree as (   select rel_ID,rel_name,rel_parent,1 as level,array[rel_ID] as path_info   from relations    where rel_parent is null   union all   select c.rel_ID,rpad(' ',p.level * 2) || c.rel_name,c.rel_parent,p.level + 1,p.path_info||c.rel_ID   from relations c     join rel_tree p on c.rel_parent = p.rel_ID)select rel_ID,rel_namefrom rel_treeorder by path_info;

基于您的示例sqlfiddle:http://sqlfiddle.com/#!11/59319/19

(我用空格替换了下划线,因为sqlfiddle不会正确显示空格)

总结

以上是内存溢出为你收集整理的用于获取存储在单个表中的n级父子关系的Postgresql查询全部内容,希望文章能够帮你解决用于获取存储在单个表中的n级父子关系的Postgresql查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存