我有一张表示亲子关系的表.关系可以深入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 );
我需要查询表并分层显示父子关系.我仍然不了解如何使用sql查询查询n级深度.
对于sqlfiddle,例如,输出的预期层次结构:
rel1 rel11 rel111 rel112 rel1121 rel2 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_name from rel_tree order by path_info;
基于您的示例SQLFiddle:http://sqlfiddle.com/#!11/59319/19
(我用空格替换了下划线,因为SQLFiddle不会正确显示空格)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。