表1
id pid name 3 0 开发中心
11 3 部门1
12 3 部门2
13 3 部门3
14 3 部门4
15 3 部门5
16 3 部门6
17 3 部门7表2
id userid12 6036
12 6044
13 6051
13 6054
14 6065
14 6067
14 6069
15 6089
15 6090
15 6091
17 6104
17 6105需要结果:
userid name 6036 开发中心
6044 开发中心
6051 开发中心
6054 开发中心
6065 开发中心
6067 开发中心
6069 开发中心
6089 开发中心
6090 开发中心
6091 开发中心
6104 开发中心
6105 开发中心
id pid name 3 0 开发中心
11 3 部门1
12 3 部门2
13 3 部门3
14 3 部门4
15 3 部门5
16 3 部门6
17 3 部门7表2
id userid12 6036
12 6044
13 6051
13 6054
14 6065
14 6067
14 6069
15 6089
15 6090
15 6091
17 6104
17 6105需要结果:
userid name 6036 开发中心
6044 开发中心
6051 开发中心
6054 开发中心
6065 开发中心
6067 开发中心
6069 开发中心
6089 开发中心
6090 开发中心
6091 开发中心
6104 开发中心
6105 开发中心
表1,(
select 表1.pid,表2.userid from 表1,表2 where 表1.id = 表2.id
) x where x.pid = 表1.id
select tb.userid,ta.name
from ta,tb
where ta.id=tb.id
start with ta.id=3
connect by prior ta.id=tb.id
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as yeexun
SQL>
SQL> with ta as(
2 select 3 id,0 pid,'开发中心' name from dual union all
3 select 11,3,'部门1' from dual union all
4 select 12,3,'部门2' from dual union all
5 select 13,3,'部门3' from dual union all
6 select 14,3,'部门4' from dual union all
7 select 15,3,'部门5' from dual union all
8 select 16,3,'部门6' from dual union all
9 select 17,3,'部门7' from dual)
10 ,tb as(
11 select 12 id,6036 userid from dual union all
12 select 12,6044 from dual union all
13 select 13,6051 from dual union all
14 select 13,6054 from dual union all
15 select 14,6065 from dual union all
16 select 14,6067 from dual union all
17 select 14,6069 from dual union all
18 select 15,6089 from dual union all
19 select 15,6090 from dual union all
20 select 15,6091 from dual union all
21 select 17,6104 from dual union all
22 select 17,6105 from dual)
23 select tb.userid,ta.name
24 from ta,tb
25 start with ta.id=3
26 connect by prior ta.id=tb.id
27 /
USERID NAME
---------- --------
6036 开发中心
6044 开发中心
6051 开发中心
6054 开发中心
6065 开发中心
6067 开发中心
6069 开发中心
6089 开发中心
6090 开发中心
6091 开发中心
6104 开发中心
6105 开发中心
12 rows selected
SQL>
create table TEST
(
ID VARCHAR2(16),
PID VARCHAR2(16),
NAME VARCHAR2(16)
);
create table TEST1
(
ID VARCHAR2(16),
USERID VARCHAR2(16)
);
insert into test (ID, PID, NAME) values ('3', '0', '开发中心');
insert into test (ID, PID, NAME) values ('11', '3', '部门1');
insert into test (ID, PID, NAME) values ('12', '3', '部门2');
insert into test (ID, PID, NAME) values ('13', '3', '部门3');
insert into test (ID, PID, NAME) values ('14', '3', '部门4');
insert into test (ID, PID, NAME) values ('15', '3', '部门5');
insert into test (ID, PID, NAME) values ('16', '3', '部门6');
insert into test (ID, PID, NAME) values ('17', '3', '部门7');
COMMIT;
insert into test1 (ID, USERID) values ('12', '6036');
insert into test1 (ID, USERID) values ('12', '6044');
insert into test1 (ID, USERID) values ('13', '6051');
insert into test1 (ID, USERID) values ('13', '6054');
insert into test1 (ID, USERID) values ('14', '6065');
insert into test1 (ID, USERID) values ('14', '6067');
insert into test1 (ID, USERID) values ('14', '6069');
insert into test1 (ID, USERID) values ('15', '6089');
insert into test1 (ID, USERID) values ('15', '6090');
insert into test1 (ID, USERID) values ('15', '6091');
insert into test1 (ID, USERID) values ('17', '6104');
insert into test1 (ID, USERID) values ('17', '6105');
COMMIT;
SELECT id,userid,substr(sys_connect_by_path(NAME,','),2) NAME1 FROM
(SELECT a.id,a.pid,a.name,b.userid FROM test a ,test1 b
WHERE a.id =b.id(+))
START WITH pid='0'
CONNECT BY PRIOR ID=pid)
WHERE userid IS NOT NULL;