쿼리문(A)이 하나가 있고
해당 쿼리문(A)의 서브쿼리(B)가 있습니다.
서브쿼리(B)에서는 A의 컬럼 중 하나를 변수로 받아 실행하는 구문을 넣어봤는데요
실행이 되더라구요!
ex)
select A.name,
A.job,
A.dept
(select dept
from department
where name = A.name) ㅡ ㅡ ㅡ ㅡ 서브쿼리 (B)
from employee A ㅡ ㅡ ㅡ ㅡ ㅡ 쿼리문 (A)
그런데 안되는 경우도 있더군요,
바로, 서브쿼리(B) 결과 값이 1개가 아닌 여러개인 경우!
그래서
해당 결과값에서 쿼리문(A)의 결과 값 중 하나를 또 조건에 주기위해
서브쿼리(B)를 다음과 같이 변화를 주었습니다.
select sub.dept
from (select dept
from department
where name = A.name) sub
where sub.dept = A.dept
결과적으로
select A.name,
A.job,
A.dept
( select sub.dept
from (select dept
from department
where name = A.name) sub
where sub.dept = A.dept ) ㅡ ㅡ ㅡ ㅡ 서브쿼리 (B) 변화를 줌 (B')
from employee A ㅡ ㅡ ㅡ ㅡ ㅡ 쿼리문 (A)
이렇게 쿼리를 날렸는데
변화를 준 서브쿼리문 (B')에서 A.dept는 쿼리문 (A)의 변수값을 가져오는데
그 안의 서브쿼리(B)와 동일한 부분의 A.name은 값을 가져오지 못하네요.
뭔가 뫼비우스 띄 구조인것 같기도하고
어떻게 처리해야될까요 ㅠㅠ
결론 : 서브 쿼리의 서브쿼리에서 쿼리문의 변수 값을 가져오는 방법이 궁금합니다!
예시 쿼리라 저렇게 표현한 것이지 실제로 2 DEPTH를 풀기 까다로우신 게 아닐까 하는데요.
실제로 2 DEPTH를 풀기가 애매할 때는..
SELECT COL1 , (SELECT COL2 FROM (SELECT COL2 FROM TABLE_B B WHERE B.COL3 = A.COL3 ORDER BY COL4 ) C WHERE ROWNUM = 1 ) COL2 FROM TABLE_A A WHERE COL5= 'A' --스칼라서브쿼리에서 메인테이블 A의 COL3을 인식 못하므로 오류 --> --스칼라서브쿼리에서 SELECT 절에 COL3을 추가하고 1 DEPTH에서 조회 조건 추가 SELECT COL1 , (SELECT ACOL2 FROM (SELECT COL3, COL2 FROM TABLE_B B ORDER BY COL4 ) C WHERE C.COL3 = A.COL3 AND ROWNUM = 1 ) COL2 FROM TABLE_A A WHERE COL5 = 'A'