2016-10-26 11 views
0

У меня есть запрос, включающий соединение, как раньше;Есть ли простой способ применить REGEXP_LIKE к пути, исходящему из соединения по предыдущему запросу в Oracle?

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 

Теперь я хочу применить регулярное выражение (REGEXP_LIKE в Oracle) в колонке путь, чтобы найти '/ KING/JONES/SCOTT/ADAMS' на «/ King/Jone».

Есть ли способ сделать это?

Заранее спасибо

+1

Очевидно, что нет, то также найдет вторую строку («KING/JONES/FORD/SMITH»). Кроме того, если у вас есть проблема, которая имеет смысл (этого нет), почему вы хотите только решения с REGEXP_LIKE, а не какие-либо другие методы? – mathguy

+0

Прошу прощения за это. Вы правы. Я изменил набор результатов запроса. Пожалуйста, подумайте о последнем наборе результатов. Помощь Regexp_like или другие методы могут помочь мне. – user6493966

ответ

2

Использование КТР:

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

 Смежные вопросы

  • Нет связанных вопросов^_^