2017-10-10 10 views
0

복잡한 쿼리에서 REGEXP_LIKE를 사용하면 실행하는 데 시간이 오래 걸릴 수 있습니다. 그 대신 다른 솔루션을 제공 할 수 있습니까?WHERE 절에서 여러 값 확인 SQL 쿼리 REGEXP_LIKE Oracle 11g

는 하나 개의 쿼리에서 값의 목록을 얻을 다른 쿼리에 만 값을 사용한다 where 절

LV_TRANS_TYPES_IDS VARCHAR2(4000); 


    SELECT LISTAGG(TRANSACTION_TYPE_ID, '|') WITHIN GROUP(ORDER BY 1) 
    INTO LV_TRANS_TYPES_IDS 
    FROM MTL_TRANSACTION_TYPES 
    WHERE TRANSACTION_TYPE_NAME IN 
     (SELECT MEANING 
      FROM FND_LOOKUP_VALUES_VL 
      WHERE LOOKUP_TYPE = 'LOOKUPNAME'); 

-이 같은 여러 값을 반환합니다 2 | 38 | 45 | 60

LV_TRANS_TYPES_IDS := '^(' || LV_TRANS_TYPES_IDS || ')$'; 

- 할당^(2 | 38 | 45 | 60) $ 아래 쿼리에이 값을 전달

SELECT COUNT(*) 
    INTO LN 
    FROM MTL_TRANSACTION_TYPES 
    WHERE 1 = 1 
    AND REGEXP_LIKE(TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS); 

제 실행 t 그는 쿼리 출력을 사용하고 두 번째, 세 번째 쿼리 입력에 대한 그 출력을 사용합니다. 같은 (표 1에서 F1, F2를 선택한 경우 REGEXP_LIKE (TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS) 노동 조합 모든 노동 조합의 모든 선택 F1, REGEXP_LIKE (TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS가) 표 3에서 F2)

+0

먼저 쿼리 출력을 받아 그 출력 초, 제 검색어 입력을 사용하여 실행한다. (REGISP_LIKE (TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS)) 테이블 3에서 REGEXP_LIKE (TRANSACTION_TYPE_ID, LV_TRANS_TYPES_IDS)의 합집합을 모두 선택한 테이블 1의 f1, f2를 선택합니다. – Chidam

답변

1

당신이 다음, 빠른 결과를 얻고 싶은 LISTAGG를 사용 해달라고하는 경우와 REGEXP_LIKE.

그냥 :

SELECT COUNT(*) 
INTO LN 
FROM MTL_TRANSACTION_TYPES 
WHERE TRANSACTION_TYPE_NAME IN 
     (SELECT MEANING 
      FROM FND_LOOKUP_VALUES_VL 
      WHERE LOOKUP_TYPE = 'LOOKUPNAME'); 
0
SELECT COUNT(*) 
INTO LN 
FROM MTL_TRANSACTION_TYPES mtt 
JOIN 
FND_LOOKUP_VALUES_VL flvv 
ON mtt.TRANSACTION_TYPE_NAME = flvv.MEANING 
AND flvv.LOOKUP_TYPE = 'LOOKUPNAME';