조인 쿼리에서 select 안에 select 조건값으로 넣기 0 4 511

by oneg [2022.01.20 15:27:35]


선배님들 질문드리겠습니다. 제가 작성하려는 쿼리는 아래 쿼리의 양식과 비슷합니다. 

샘플로 적어서 틀릴 수 도 있으니 참고만 부탁드립니다.

 

제가 질문을 드리는 것은 아래쿼리에서 조인한 테이블 t1에서 select 안에 select의 조건을 넣어서 사용은 안되던데, 혹시 방법이 있을까요?

안된다면 다른 방법으로 해야하는지 궁금합니다.

select t1.seq, t1.emp_no, (select name from (select name, amt from emp_no = t1.emp_no) )

 from tmp1 t1, tmp2 t2

where t1.seq = t2.seq

by 마농 [2022.01.20 15:58:05]

2단계 서브쿼리 안으로 메인 항목 조건을 줄 수 없습니다.
올려주신 샘플 쿼리는 2단계 서브쿼리를 사용할 필요가 없어 보입니다.


by oneg [2022.01.20 16:01:51]

감사합니다! 다른 방법을 찾아봐야겠네요


by jkson [2022.01.20 16:02:50]

아마도.. 이렇게 하면 되실 걸요. 위 쿼리에서는 where 조건에 emp_no 조건 밖에 없어서 이중으로 서브쿼리할 필요 없겠지만..

select t1.seq, t1.emp_no, (select name from (select emp_no, name, amt from tmp3 where ~~~기타 조건~~ ) t3 where t3.emp_no = t1.empno )

 from tmp1 t1, tmp2 t2

where t1.seq = t2.seq


by jkson [2022.01.21 15:29:10]

답변 달고 다시 읽어보니 조금 의미 전달이 잘 안 되었을 수 있겠네요.

예를 들어 아래와 같은 쿼리가 있다면

SELECT
	(
	SELECT COL2
	  FROM
		(
		SELECT 
			   COL2
		  FROM TBL2 B
		 WHERE COL1 = A.COL1
		 ORDER BY COL2 DESC
        ) 
      WHERE ROWNUM = 1
    ) FSTVAL
   FROM TBL1 A 

A.COL1 이 B테이블 조건절로 들어갈 수가 없습니다.(2단계 서브쿼리)
->부적합한 식별자 오류
이 쿼리를 아래와 같이 바꿔주면
   
SELECT
	(
	SELECT COL2
	  FROM
		(
		SELECT COL1,
			   COL2
		  FROM TBL2
		 ORDER BY COL2 DESC
        ) B
 	  WHERE B.COL1 = A.COL1
		AND ROWNUM = 1
    ) FSTVAL
   FROM TBL1 A

WHERE B.COL1 = A.COL1 조건으로 인해
서브쿼리의 TBL2 안으로 A.COL1 조건이 침투할 수 있게 됩니다.
이때 TBL2 전체를 COL2로 DESC 소팅한 후
COL1 조건으로 필터하는 것이 아니라
TBL2를 A.COL1 조건으로 먼저 ACCESS할 수 있어
인덱스를 활용할 수 있다면 인덱스까지 사용 가능하게 됩니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입