두개의 테이블에서 left outer join을 하고 있습니다.
조건에 하나만 조인되는것을 검색하고 싶습니다.
ex>
A테이블
seq | mid |
1 | aaa |
2 | bbb |
3 | ccc |
4 | ddd |
B테이블
seq | mid | tel | phone |
1 | aaa | 02-555-5555 | 010-2222-2222 |
2 | bbb | 02-554-5555 | 010-3333-2222 |
3 | bbb | 02-553-5555 | 010-3333-3333 |
4 | ddd | 02-666-6666 | 010-4444-4444 |
이런식의 테이블에서
select a.seq, a.mid, b.tel, b.phone
from a left outer join b
on a.mid=b.mid
이런식으로 검색하면
seq | mid | tel | phone |
1 | aaa | 02-555-5555 | 010-2222-2222 |
2 | bbb | 02-554-5555 | 010-3333-2222 |
2 | bbb | 02-553-5555 | 010-3333-3333 |
4 | ddd | 02-666-6666 | 010-4444-4444 |
이런식으로 되는데..
mid가 bbb인것은 join되는것이 2개 이상이 되니까 검색 안되고,
seq | mid | tel | phone |
1 | aaa | 02-555-5555 | 010-2222-2222 |
4 | ddd | 02-666-6666 | 010-4444-4444 |
이런식으로
1개만 join이 되는 aaa 와 ddd 만 나오도록이요.
Comment 6
-
처리짱
2015.07.08 17:32
-
깨비꼬비
2015.07.09 10:19
이건... 조인도 아니고.. mid밖엔 추출이 안되는데요;;
-
처리짱
2015.07.09 10:47
흠.. 원하던 결과값이 아닌가요 ㅎㅎ
실제 데이터를 올여봐 주실래요.
-
샤오린
2015.07.09 11:11
SELECT
A.SEQ, A.MID, C.TEL, C.PHONE
FROM A LEFT JOIN (
SELECT* FROM B
WHERE MID IN (
SELECT MID FROM B
GROUP BY MID
HAVING COUNT(MID) = 1
)
)C ON A.MID = C.MID
WHERE C.SEQ IS NOT NULL -
샤오린
2015.07.09 11:15
질문자님 질문이
1. 조건에 하나만 조인되는것을 검색하고 싶습니다
이기 때문에 해당 조건 (A 테이블의 mid 컬럼이 유니크 하다는 는 가정하에)
B 테이블의 mid 컬럼의 중복된 값을 제거조회한 후 mid 를 A 테이블에 외부조인을 이용하여 연결하였습니다.
후에 제거된 B 테이블의 키값인 SEQ 가 없는 값을 제외하면 B 에 조인이 되지 않은 값이 제거되어 출력되었습니다.
원하시는 값이 맞나요?
-
깨비꼬비
2015.07.09 12:26
아... 샤오린님 쿼리보고 안쪽부터 실행해보니... 어떻게 해야 되는지 알겠습니다.
처리짱님 쿼리가 틀린게 아니었네요.; (너무 핵심만 답변하시니 이해를 못했습니다;;;)
요지는 JOIN을 한 후에 2개이상의 데이터를 제외시키라는것이 아니라,
JOIN하기 전에 먼저 2개이상의 데이터를 제외시키라는 것이었네요..;
^^; 처리짱님, 샤오린님 답변 감사합니다.
select *
from b as aa,
(
select mid
from b
group by mid
having count(*) = 1
) as bb
where aa.mid = bb.mid