어떻게 조인해야 하나요? 0 4 2,010

by 볼우물 [SQL Query] [2010.05.18 21:14:12]



테이블이 두개가 있습니다. 테이블 명은

A_TAB, B_TAB라고 했을 때

A_TAB에는 이런 자료가 있다고 가정합니다.

 COL1 COL2  COL3  COL4
 1111  땅개  10000 정상 
 2222  하늘개  3000 오류
 3333  바다개  40000 정상

B_TAB에는 이런 자료가 있다고 가정합니다.

 COL1 COL2  COL3  COL4 
 1111 땅개  6000   정상
 1111 육개 4000  정상
 2222  하늘개 3000 오류 
 3333  바다개 10000  정상 
 3333  바다개  20000 정상
 3333  아무개  10000  오류



위와 같은 데이터가 있을 때

두 테이블을 조인해서

결과값은

 COL1 COL2  COL3  COL4 
 2222  하늘개 3000   오류
 3333  바다개  40000  정상


이런 결과가 나올려면

어떻게 해야 하나요?

두 테이블의 키는 COL1입니다.

그리고 보시면 아시겠지만 A_TAB의 COL3은 B테이블의 COL3의 합입니다.

제가 보여주고 싶은 것은 같은 COL1이면서 A_TAB의 COL4가 정상이고 B_TAB의 COL4가 정상이면

안보이는 것입니다. A_TAB의 COL4가 정상인데 B_TAB의 COL4가 오류이거나

A_TAB의 COL4가 오류이고 B_TAB의 COL4또한 오류인 자료의 A_TAB를 보여주고 싶습니다.

by 매컬리 [2010.05.18 22:19:54]
select a.col1, a.col2, a.col3, a.col4
from a_tab a, b_tab b
where a.col1 = b.col1
and (a.col4 = '오류' or b.col4 = '오류');

by 꼬랑지 [2010.05.19 09:24:45]
B테이블에서 하나의 COL1에 대해 복수개의 로우가 존재할 때 모든 로우가 정상이면 정상,하나라도 오류가 있다면 오류로 취급하나요? 이 부분에 대한 설명이 좀 부족한 것 같은데 그게 맞다면 매컬리님 쿼리처럼 하시면 되구요 대산 테이블 A와 B가 1:다 관계라서 바로 조인하면 데이타가 부풀려지므로 서브쿼리로 하는게 낫겠네요

SELECT *
FROM A
WHERE A.COL1 IN(SELECT COL1
FROM B
WHERE A.COL4='오류' OR B.COL4='오류'
)

by camela [2010.05.19 18:13:58]
with A_TAB as(
select '1111' col1, '땅개' col2, 10000 col3, '정상' col4 from dual union all
select '2222' col1, '하늘개' col2, 3000 col3, '오류' col4 from dual union all
select '3333' col1, '바다개' col2, 40000 col3, '정상' col4 from dual
), B_TAB as(
select '1111' col1, '땅개' col2, 6000 col3, '정상' col4 from dual union all
select '1111' col1, '육개' col2, 4000 col3, '정상' col4 from dual union all
select '2222' col1, '하늘개' col2, 3000 col3, '오류' col4 from dual union all
select '3333' col1, '바다개' col2, 10000 col3, '정상' col4 from dual union all
select '3333' col1, '바다개' col2, 20000 col3, '정상' col4 from dual union all
select '3333' col1, '아무개' col2, 10000 col3, '오류' col4 from dual
)
select *
from a_tab a
where col4 = '오류'
or exists(select 1
from b_tab
where col1 = a.col1
and col4 = '오류')

by 볼우물 [2010.05.19 22:57:37]
많은 답변 감사합니다. 삼일째 삽질하다가 이제야 해답을 얻게되네요... not in을 사용했다가 in구문은 1000건 미만만 가능하는 걸 알고 답변들을 이용해서 적요해봐야겠네요. 감사합니다. 편안한 밤 되세요. 전 이제 퇴근합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입