求一个取得一棵树的所有孩子节点的sql文
在工作中遇到一个问题,关于取得一棵树的所有孩子节点.
脑袋想破了,也没有想起解决方法.特来请教大侠们.
谢谢!
个表结构如下:
id | parent | flag
--------+-------- +--------
1011 101 5
1012 101 5
101 10 2
10 1 1
1 7
想得到的结果如下:
1.当flag=5时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
1011 1011 101 5
1012 1012 101 5
2.当flag=2时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
101 1011 101 5
101 1012 101 5
101 101 10 2
3.当flag=1时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
10 1011 101 5
10 1012 101 5
10 101 10 2
10 10 1 1
也就是当指定flag时,
先查出对应的id,再以这个id去查询下面所有的子节点.
最后出来的数据,第一列数据,就是先查出来的id.
flag 最好用in的方式
如flag in ('1','3','5')
脑袋想破了,也没有想起解决方法.特来请教大侠们.
谢谢!
个表结构如下:
id | parent | flag
--------+-------- +--------
1011 101 5
1012 101 5
101 10 2
10 1 1
1 7
想得到的结果如下:
1.当flag=5时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
1011 1011 101 5
1012 1012 101 5
2.当flag=2时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
101 1011 101 5
101 1012 101 5
101 101 10 2
3.当flag=1时,结果:
oldid | id | parent | flag
---------+--------+-------- +--------
10 1011 101 5
10 1012 101 5
10 101 10 2
10 10 1 1
也就是当指定flag时,
先查出对应的id,再以这个id去查询下面所有的子节点.
最后出来的数据,第一列数据,就是先查出来的id.
flag 最好用in的方式
如flag in ('1','3','5')
作者: yanxt 发布时间: 2011-05-03
建立测试表:
CREATE TABLE testtable
(
id character varying(20) NOT NULL,
parent character varying(20),
flag character(1)
)
插入数据:
insert into testtable(id,parent,flag) values('1011','101','5');
insert into testtable(id,parent,flag) values('1012','101','5');
insert into testtable(id,parent,flag) values('101','10','2');
insert into testtable(id,parent,flag) values('10','1','1');
insert into testtable(id,parent,flag) values('1',null,'7');
CREATE TABLE testtable
(
id character varying(20) NOT NULL,
parent character varying(20),
flag character(1)
)
插入数据:
insert into testtable(id,parent,flag) values('1011','101','5');
insert into testtable(id,parent,flag) values('1012','101','5');
insert into testtable(id,parent,flag) values('101','10','2');
insert into testtable(id,parent,flag) values('10','1','1');
insert into testtable(id,parent,flag) values('1',null,'7');
作者: yanxt 发布时间: 2011-05-03
这个需要用 function 吧, 一个SQL估计不行。
作者: tanfeng3 发布时间: 2011-05-03
本帖最后由 yanxt 于 2011-05-03 17:00 编辑
用function 或者 存储过程都可以.
唉!
对PostgreSQL 不熟,不会写!
谢谢
用function 或者 存储过程都可以.
唉!
对PostgreSQL 不熟,不会写!
谢谢
作者: yanxt 发布时间: 2011-05-03