我不知道你的表結構是什麼。如果你將它作爲路徑存儲,那麼下面的內容應該可以工作。該查詢支持Chris的多條記錄。它會選擇所有的。
with test as
(
select 1 id, '/King/John/Jack/Chris' str from dual union all
select 2 id, '/King/John/Jack/April' str from dual union all
select 3 id, '/King/John/Jack/Sean' str from dual union all
select 4 id, '/King/Jerry/Tom' str from dual
)
select id,
str,
regexp_substr (str, '[^/]+', 1, rn) split,
rn
from test
cross
join (select rownum rn
from (select max (length (regexp_replace (str, '[^/]+'))) + 1 mx
from test
)
connect by level <= mx
) A
where regexp_substr (str, '[^/]+', 1, rn) is not null
and instr(str, 'Chris') > 0
order by id, rn
;
這裏是SQL小提琴爲例
Example in SQL Fiddle
訣竅是交叉連接創建用於主表的每一行多行。
ID STR SPLIT RN
1 /King/John/Jack/Chris King 1
1 /King/John/Jack/Chris John 2
1 /King/John/Jack/Chris Jack 3
1 /King/John/Jack/Chris Chris 4
是的,這是可能的。你應該從Chris'開始,選擇所有的父母。表格定義和樣本數據將會有所幫助。 [我想你可以從這裏開始...](http://stackoverflow.com/questions/2319284/sql-recursive-query-on-self-refrencing-table-oracle) – valex