JOIN 을 EXISTS 로 대체할 때 0 3 1,900

by Lethe [Oracle Tuning] JOIN EXISTS [2018.09.20 17:22:55]


안녕하세요.

항상 도움 감사 드립니다.

 

A, B, C 세개의 테이블이 있고 A-B, B-C 형태로 조인이 되고 있구요.

SELECT 할때는 A, C의 컬럼만 가져옵니다.

B테이블의 건수가 많고 DISTINCT 형태로 가져오게 되는데다가 LEFT JOIN이다보니

이 구문이 성능이 너무 안나옵니다.

B테이블을 EXISTS로 대체하고 싶은데

 

1. 원본
SELECT DISTINCT A.name, C.name
FROM A 
 LEFT JOIN B on A.id = B.id
 LEFT JOIN C on B.key = C.key

2. 수정하고자 하는 쿼리
SELECT A.name, C.name
FROM A
WHERE EXISTS (SELECT 1 FROM B WHERE B.id = A.id)

까지는 하겠는데, 여기서 막혔네요.

어떻게 하는게 좋을까요?... B는 체크 조건으로만 쓰고 싶습니다.

by 마농 [2018.09.20 17:53:59]

C 가 A 에 연결되는게 아니라 B 에 연결되는 형태네요.
C 를 조회하려면? 중간에 B 를 뺄 수 없는 상황인데요?
a, b, c 처럼 추상화 해서 표현하지 마시고.
실제 상황을 좀더 구체적으로 표현해 주셔야만 해결이 가능할 것 같습니다.
예시 자료를 들어 주시면 더 좋구요.


by 신이만든지기 [2018.09.20 18:59:04]

A 테이블에 C테이블의 조인 컬럼(예 c.id)을 추가해주면 쿼리에서 B테이블을 제거할 수 있습니다.

그렇게 하지 않고서는 방법이 없습니다.


by Lethe [2018.09.21 08:16:09]

분리된 망에 있는 내용이라 이렇게 설명 할 수 밖에 없었습니다. 죄송합니다. ^^;;

A-B, B-C 상황이면 B를 뺄수 없다는거네요.

두 분 답변 감사드립니다. 꾸벅~

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