안녕하세요...문득 궁금한 점이 생겨서요..
WITH
TMP1 AS (
SELECT 'AAAA' ID, '1111' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '2222' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '3333' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '4444' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '5555' CD FROM DUAL
),
TMP2 AS (
SELECT '1111' CD, '20220401' DY FROM DUAL UNION ALL
SELECT '2222' CD, '20220402' DY FROM DUAL UNION ALL
SELECT '3333' CD, '20220403' DY FROM DUAL UNION ALL
SELECT '9999' CD, '20220403' DY FROM DUAL
)
/* 1번 */
SELECT * FROM TMP2
WHERE CD IN (SELECT CD FROM TMP1
WHERE ID = (SELECT ID FROM TMP1
WHERE CD = '2222'
)
)
;
/* 2번 */
SELECT * FROM TMP2
WHERE CD IN (SELECT B.CD
FROM TMP1 A, TMP1 B
WHERE A.CD = '2222'
AND B.ID = A.ID
)
;
다음과 같이 1번 서브쿼리(?)와 2번 조인으로 했을시 차이가 있을까요?
아니면 둘다 동일한 건데 방식의 차이인가요??...제가 무식해서..ㅠㅠ
TMP1에는 ID와 CD 의 인덱스가 각각 존재 합니다..
네. 동일한 결과를 다른 방식으로 구현한 것입니다.
다만. 테이블의 PK 정보나, 데이터 분포 등에 따라 오류 가능성이 보입니다.
1번의 경우 2222 에 해당하는 ID 가 여러개일 가능성을 생각해야 합니다.
이퀄(=) 조건이 아닌 IN 조건을 써야 할 듯 하네요.
마농님 답글 감사드립니다...^^