一表结构如下:tbAB_ID B_NAME B_PID
---------------------------
1 一厂 0
2 二厂 0
3 技术科 1
4 生产科 2
希望的查询结果为:B_ID B_NAME 所属
-----------------------------
1 一厂 无
2 二厂 无
3 技术科 一厂
4 生产科 二厂
---------------------------
1 一厂 0
2 二厂 0
3 技术科 1
4 生产科 2
希望的查询结果为:B_ID B_NAME 所属
-----------------------------
1 一厂 无
2 二厂 无
3 技术科 一厂
4 生产科 二厂
where a.b_pid=b.b+id(+)
where a.b_pid=b.b_id(+)
SELECT '1' b_id,'一厂' B_NAME,'0' B_PID FROM dual
UNION ALL
SELECT '2','二厂','0' FROM dual
UNION ALL
SELECT '3','技术科','1' FROM dual
UNION ALL
SELECT '4','生产科','2' FROM dual
)
select a.B_ID,a.B_NAME,nvl(b.B_NAME,'无') 所属 from tba a,tba b
where a.b_pid=b.b_id(+) ORDER BY a.B_ID;结果:
B_ID B_NAME 所属
---------------------
1 一厂 无
2 二厂 无
3 技术科 一厂
4 生产科 二厂
select b_id,bname,decode(bname,kk,'无',rtrim(kk,'--->'||bname)) 所属 from(
select b_id,bname,b_pid,ltrim(sys_connect_by_path(bname,'--->'),'--->') kk from a
START with NOT EXISTS(select 1 from a b where b.b_id=a.b_pid)
connect by prior b_id = b_pid
)
with temp as
(select 1 id, '一厂' name, 0 pid
from dual
union all
select 2 id, '二厂' name, 0 pid
from dual
union all
select 3 id, '技术科' name, 1 pid
from dual
union all
select 4 id, '生产科' name, 2 pid from dual
)
select t.id, t.name, decode(t.pid, 0, '无',(select t1.name from temp t1 where t1.id = t.pid))
from temp t;
select a.b_id,a.b_name,nvl(b.b_name,'无') from tba a,tba b
where a.b_pid = b.b_id(+);