쿼리 질문 드립니다. 0 6 1,854

by 웁스 [SQL Query] [2013.04.23 14:03:18]


테이블1
111
222
333
테이블2
test1    111
test1    222
test1    333
test2    111
test2    222
결과
test2    333
테이블1의 3개의 데이터 기준으로 테이블2의 각 계정에 따른 데이터 없는 것을 추출하고 싶은데 잘 풀리지가 않네요.
도움 부탁 드립니다.
by 우리집아찌 [2013.04.23 14:35:56]
WITH T1 ( A ) AS (
SELECT '111' FROM DUAL UNION ALL
SELECT '222' FROM DUAL UNION ALL
SELECT '333' FROM DUAL 
), T2 ( B , C ) AS (
SELECT 'test1' , '111' FROM DUAL UNION ALL
SELECT 'test1' , '222' FROM DUAL UNION ALL
SELECT 'test1' , '333' FROM DUAL UNION ALL
SELECT 'test2' , '111' FROM DUAL UNION ALL
SELECT 'test2' , '222' FROM DUAL 
)

SELECT 
 tt2.B , T1.A
FROM
T1 , (SELECT B FROM T2 GROUP BY B ) tt2 
WHERE ( B , A ) NOT IN ( SELECT B , C FROM T2 ) 
ORDER BY B , A
 

by 디케이 [2013.04.23 14:47:54]
 
--partition outer join 으로도 할수 있겠네요
SELECT t2.B, t1.a
 FROM t1 LEFT OUTER JOIN t2 PARTITION BY (t2.B) ON T1.a = T2.c
 WHERE c IS NULL

by 필상 [2013.04.23 14:50:38]

http://www.gurubee.net/lecture/2204

이걸 참조하시면 될듯...

by 아발란체 [2013.04.23 14:56:07]
--또 다른 방법으로는
--효율은... 별로임.. ㅋㅋ
WITH 테이블1 AS (
 SELECT 111 D FROM DUAL UNION ALL
 SELECT 222 FROM DUAL UNION ALL
 SELECT 333 FROM DUAL
), 테이블2 AS (
 SELECT 'test1' F, 111 D FROM DUAL UNION ALL
 SELECT 'test1', 222 FROM DUAL UNION ALL
 SELECT 'test1', 333 FROM DUAL UNION ALL
 SELECT 'test2', 111 FROM DUAL UNION ALL
 SELECT 'test2', 222 FROM DUAL 
)
SELECT 테이블2.F, 테이블1.D FROM 테이블1, (SELECT F FROM 테이블2 GROUP BY F) 테이블2
MINUS
SELECT F, D FROM 테이블2

by 우리집아찌 [2013.04.23 14:58:17]

아우터 조인도 가능하네요.. 오늘 많이 배우고 가네요..


by 웁스 [2013.04.24 13:23:48]
답변 감사합니다. ^^
많은 방법이 있네요. 쿼리 공부도 꾸준히 해야겠습니다. 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입