2016-10-26 4 views
0

私は以前のような接続を含むクエリを持っています。Oracleの以前のクエリで接続から来るパスにREGEXP_LIKEを適用する簡単な方法はありますか?

SELECT SYS_CONNECT_BY_PATH(ENAME, '/') as path 
FROM EMP 
WHERE CONNECT_BY_ISLEAF=1 
START WITH MGR IS NULL CONNECT BY 
PRIOR EMPNO=MGR; 

結果は

path 
----------------------------------- 
/KING/JONES/SCOTT/ADAMS 
/KING/BLAKE/ALLEN 
/KING/BLAKE/WARD 
/KING/BLAKE/MARTIN 
/KING/BLAKE/TURNER 
/KING/BLAKE/JAMES 
/KING/CLARK/MILLER 

は、今私が「/ KING /によって '/ KING/JONES/SCOTT/ADAMS' を見つけるために、パス列に正規表現(OracleでREGEXP_LIKE)を適用したい以下の通りですジョーン '。

これを行う方法はありますか?

+1

もちろんそれは、ありません2番目の行( 'KING/JONES/FORD/SMITH')も検索されます。また、問題がある場合(これはそうではありません)、他の方法ではなく、なぜREGEXP_LIKEを持つソリューションだけが必要なのですか? – mathguy

+0

これは申し訳ありません。そうです。クエリ結果セットを変更しました。最後の結果セットについて考えてみてください.Regexp_likeなどの方法で助けてください。 – user6493966

答えて

2

利用CTE事前に

ありがとう:

with t as (
    SELECT SYS_CONNECT_BY_PATH(ENAME, '/') as path 
    FROM EMP 
    WHERE CONNECT_BY_ISLEAF=1 
    START WITH MGR IS NULL CONNECT BY 
    PRIOR EMPNO=MGR 
) 
select * 
from t 
where path like '/KING/JONE%'; 

(あなたの例では、likeがうまく仕事をする - とより速いregexp_like

+0

これは私に感謝することができます – user6493966

関連する問題