WITH
T1 AS -- 10만건
(
SELECT '1' PK1, '1' PK2, '1' PK3 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '2' PK3 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '3' PK3 FROM DUAL
)
, T2 AS -- 50만건
(
SELECT '1' PK1, '1' PK2, '1' PK3, 'A' PK4, 'aa' COL1 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '1' PK3, 'B' PK4, 'bb' COL1 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '2' PK3, 'A' PK4, 'aa' COL1 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '2' PK3, 'B' PK4, 'aa' COL1 FROM DUAL
UNION ALL SELECT '1' PK1, '1' PK2, '3' PK3, 'A' PK4, 'aa' COL1 FROM DUAL
)
, T3 AS -- 20만건
(
SELECT 'aa' COL1, '11' COL2 FROM DUAL
UNION ALL SELECT 'bb' COL1, '22' COL2 FROM DUAL
UNION ALL SELECT 'cc' COL1, '33' COL2 FROM DUAL
UNION ALL SELECT 'dd' COL1, '44' COL2 FROM DUAL
UNION ALL SELECT 'ee' COL1, '55' COL2 FROM DUAL
)
SELECT T1.*, T3.COL2
FROM T1, T2, T3
WHERE T1.PK1 = T2.PK1
AND T1.PK2 = T2.PK2
AND T1.PK3 = T2.PK3
AND T2.COL1 = T3.COL1(+)
AND T3.COL2 = '11'
-- T1 기본, T2 상세로 1:다 일때 T2.COL1=T3.COL2 일때 조회조건으로 T3.COL2를 검색조건으로 조회시
-- 해당하는 T1데이터와 T3의COL2값을 조회하려할때 (T2중복은 제거)
-- T1의 컬럼이 한 50개쯤되는데.. T1의pk키로 group by 를 하면 max로 도배를 해야하는데 이게 맞는건지;; 다른방법이 없는지 문의드립니다.
결국은 T1기준으로 조회하는데 T3의 col2값으로 조회하고 싶은거죠; T2의 col1과 T3의 col2는 1:1이고...
지금 적용중인건 이렇습니다만
SELECT
A.PK1
,A.PK2
,A.PK3
-- 그외 T1 컬럼 다수 50개 정도.. max(컬럼) 처리 <- 이걸 꼭하는수밖에 없나.. 최선인가;;해서;;
,MAX(B.COL2) AS COL2
FROM
(
SELECT T1.*, T2.COL1
FROM T1, T2
WHERE T1.PK1 = T2.PK1
AND T1.PK2 = T2.PK2
AND T1.PK3 = T2.PK3
-- T1 조회조건 동적생성
) A, T3 B
WHERE 1=1
AND A.COL1 = B.COL1(+)
AND B.COL2 = :PARAM -- 11 얘도 동적조회조건
GROUP BY A.PK1, A.PK2, A.PK3
-- 감사한 답글들 참고해서 좀더 고민해보겠습니다^^ 감사합니다~
t3.col2의 조건으로 데이터를 보여준다면 t2와 t3를 조인해서 조회하고
group by t2.pk1, t2.pk2, t2.pk3 한 이후에 t1을 이너 조인으로 가져오도록 처리하면
어떨까요? 좋은 결과 얻으시길 바랍니다.
SELECT /*+ ORDERED */ T1.*, A.COL2
FROM
(SELECT t2.pk1, t2.pk2, t2.pk3, MAX(T3.COL2) AS COL2
FROM T2
, T3
WHERE T2.COL1 = T3.COL1
AND T3.COL2 = '11'
GROUP BY t2.pk1, t2.pk2, t2.pk3) A
, T1
WHERE A.PK1 = T1.PK1
AND A.PK2 = T1.PK2
AND A.PK3 = T1.PK3
;