求一个取得一棵树的所有孩子节点的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')

作者: 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');

作者: yanxt   发布时间: 2011-05-03

这个需要用 function 吧, 一个SQL估计不行。

作者: tanfeng3   发布时间: 2011-05-03

本帖最后由 yanxt 于 2011-05-03 17:00 编辑

用function 或者 存储过程都可以.
唉!
对PostgreSQL 不熟,不会写!

谢谢

作者: yanxt   发布时间: 2011-05-03