postgresql connectby 函数使用示例

connectby 是 postgresql 的 tablefunc 扩展模块所提供一个函数,它的作用是生成递归形式的记录行。

connectby 的参数

connectby 有7个参数,简单用示例说明如下
select * from connectby ('数据表字', '子字段', '父字段', '排序字段(可选)', '开始行的字段值', '查询深度(0表示不限)', '分支间隔符(可选)')
as t('子字段 数据类型', '父字段 数据类型', level int/*层级,固定数据类型*/, branch text/* 分支描述,固定数据类型 */, pos int /* 排序序号, 固定数据类型*/)

使用示例

create table prod_cat(cat_id INTEGER, cat_name VARCHAR(40), parent_cat_id INTEGER);
INSERT into prod_cat(cat_id, cat_name, parent_cat_id)
VALUES
(1, 'A', null),
(2, 'AA', 1),
(3, 'AB', 1),
(4, 'AAA', 2),
(5, 'AAB', 4),
(6, 'B', NULL),
(7, 'BA', 6),
(8, 'BAA', 7),
(9, 'BAAA', 8)
select t.*,t1.cat_name,t2.cat_name as parent_cat_name
from connectby('prod_cat', 'cat_id', 'parent_cat_id', 'cat_name', '1', 0, '~')
AS t(cat_id INTEGER, parent_cat_id INTEGER, LEVEL1 INT, branch1 text, se1q integer)
left join prod_cat t1 on t1.cat_id=t.cat_id
left join prod_cat t2 on t2.cat_id=t.parent_cat_id

发表评论