INNER JOIN 내부에서 외부의 칼럼을 참조 할 수 있을까요 1 315

by 허승호 [SQL Query] INNERJOIN [2025.05.29 17:17:28]


안녕하세요.

오라클에서 SQL 작성시 어려움이 있습니다.

먼저 아래 SQL을 봐주세요  

SELECT A.SEQ, B.CNT 
 FROM TBL A
 INNER JOIN (SELECT B.SEQ , COUNT(*) AS CNT 
               FROM TBL_1 BB 
              WHERE BB.SEQ = A.SEQ) B
             ON A.SEQ = B.SEQ
WHERE A.SEQ = 370

이 문법이 맞지 않는 거라는 걸 알고는 있습니다. 

INNER JOIN 안쪽 부분에 A.SEQ 라는 부분이 포함되어 있어서 당연히 문법 오류입니다. 괄호 밖에 써야 맞는거지요.

그런데  TBL_1 테이블이 ROW가 제법 많아 집계를 구해야 하는데 속도가 느립니다.

코딩으로는 구현이 가능하나 SQL 로 구현해야 하는 상황입니다.

좋은 방법이 없을까요?

by 우주민 [2025.05.29 17:33:20]
SELECT A.SEQ, COUNT(B.SEQ) AS CNT 
  FROM TBL A
 INNER JOIN TBL_1 B
    ON A.SEQ = B.SEQ
 WHERE A.SEQ = 370
 GROUP BY A.SEQ

이런 형태는 많이 느릴까요?


by 허승호 [2025.05.30 08:32:42]

우선 답변드려 감사합니다. 

네 그렇게 해봐도 빠른 응답이 나오질 않네요.  

제가 질문한 사항은 간단한 예시로 작성된 부분이라 실제로는 TBL과 조인 테이블도 많고

TBL에서 추출할 칼럼이 제법 많습니다.

 


by 마농 [2025.05.30 10:59:13]

실제 쿼리를 보여 줄 수 없다면?
최대한 비슷한 형태의 쿼리를 보여주셔야 합니다.
지금 질문의 쿼리는 실쿼리와 전혀 다른 쿼리라고 할 수 있습니다.

인라인뷰 안쪽으로 메인 항목 조건을 거는 방법으로는
apply join 기능이 가능하긴 합니다.


by 유령회원 [2025.06.05 13:56:33]

inner join lateral


by 창조의날개 [2025.06.13 13:27:19]
SELECT A.SEQ,
       (SELECT COUNT(*) 
        FROM TBL_1 BB 
        WHERE BB.SEQ = A.SEQ) AS CNT
FROM TBL A
WHERE A.SEQ = 370;

질문내용과 같이 SEQ값이 하나라면 위와 같이 서브쿼리로 만들어 사용하면 TBL_1 테이블을 한번만 읽기 때문에 최대한의 효율이 있을듯 합니다.