0

以前の 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

ここで、正規表現 (Oracle では REGEXP_LIKE) をパス列に適用して、「/KING/JONE」で「/KING/JONES/SCOTT/ADAMS」を見つけたいと考えています。

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

前もって感謝します

4

1 に答える 1

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

于 2016-10-26T11:27:12.073 に答える