oracle connect by用法

oracle connect by用法

create table t_location(
       id number primary key,
       name varchar(16) not null,
       pid number not null
)
insert into t_location values(1,'華東區',0);
insert into t_location values(2,'華南區',0);
insert into t_location values(3,'福建省',1);
insert into t_location values(4,'江蘇省',1);
insert into t_location values(5,'福州市',3);
insert into t_location values(6,'廈門市',3);
insert into t_location values(7,'蘇州市',4);
insert into t_location values(8,'揚州市',4);
insert into t_location values(9,'廣東省',2);
insert into t_location values(10,'廣西省',2);
insert into t_location values(11,'廣州市',9);
insert into t_location values(12,'深圳市',9);
insert into t_location values(13,'南寧市',10);
insert into t_location values(14,'桂林市',10);
--2.1 從根節點查找葉子節點
select t.*, level, CONNECT_BY_ROOT(id)
  from t_location t
 start with t.id = 1
connect by prior t.id = t.pid;

--2.2 從葉子節點查找上層節點
--第一種,修改prior關鍵字位置
select t.*, level, CONNECT_BY_ROOT(id)
  from t_location t
 start with t.id = 14
connect by t.id = prior t.pid;

--第二種,prior關鍵字不動 調換後面的id=fid邏輯關係的順序
select t.*, level, CONNECT_BY_ROOT(id)
  from t_location t
 start with t.id = 14
connect by prior t.pid = t.id;

--查找某個結點的路由
select replace(wm_concat(name),',',' ') as addr from(
  select t.name,connect_by_root(id) as rid
    from t_location t
    start with t.name = '深圳市'
  connect by prior t.pid = t.id
  order by level desc;
)
--查找所有結點的路由,出現問題,三個結點的,排序錯誤,出現'華南區 深圳市 廣東省'這樣的情況
select rid,replace(wm_concat(name),',',' ') as addr from(
  select t.name,connect_by_root(id) as rid
    from t_location t
  connect by prior t.pid = t.id
  order by level desc
)
group by rid;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章