A / B 테이블이 있는데, 1:N으로 설계되어 있습니다.
A 테이블을 기준으로 리스트를 조회하기 위해서 조인을 어떻게 걸어야 할까요?
현재는 LEFT OUTER JOIN 후, GROUP BY 혹은 DISTINCT 하고 있습니다.
그리고 B 테이블에 만족하는 테이블을 조건은 아래처럼 처리하고 있습니다.
SELECT (GROUP BY 컬럼)
FROM A
LEFT OUTER JOIN B
ON 조건.
WHERE EXISTS (
SELECT 1
FROM B
WHERE B.조건
)
GROUP BY 컬럼
문제는 없지만, 조금 더 효율적으로 개발하고 싶어서 문의드립니다.
효율적인 쿼리를 질문하시길래 성능관점으로 보고 답변 드린 것인데.
성능 관점으로 보려면 여러가지 상황을 고려하여 그때 그때 다른 결과가 나옵니다.
즉 주어진 상황에 맞는 해결책이 다 다르기 때문에 구체적 상황을 요청드린 것인데요.
그러나, 질문은 그냥 성능이 아닌 원하는 결과를 뽑는 구문에 대한 질문이었던 것 같네요.
1. 조인 후 중복제거하는 방법도 있고
2. 서브쿼리 조건을 이용하는 방법도 있습니다.
- 서브쿼리는 EXISTS 만 해당되는게 아니고 IN 절로도 구현 가능합니다.
SELECT DISTINCT d.deptno, d.dname FROM dept d INNER JOIN emp e ON e.deptno = d.deptno WHERE e.job = 'CLERK' AND e.sal < 2000 ; SELECT d.deptno, d.dname FROM dept d WHERE d.deptno IN (SELECT e.deptno FROM emp e WHERE e.job = 'CLERK' AND e.sal < 2000 ) ; SELECT d.deptno, d.dname FROM dept d WHERE EXISTS (SELECT 1 FROM emp e WHERE e.job = 'CLERK' AND e.sal < 2000 AND e.deptno = d.deptno ) ;