진작에 이렇게 설명을 하셨다면 좋았을텐데...
다시 정리하면 insurance 테이블에 있는 id를 제외한 kic_member 테이블의
회원이 필요하다는 얘기 같네요.
조인으로 해결 하려면 Non-Equi_Join 같은데...
이를 해결하려면 차집합(minus)를 사용할 수도 있고,
not exists를 사용해도 될 것 같네요.
그런데 회원의 ID가 동일한 사람이 왜 있는지 궁금 ?
( 아! 한 사람이 여러번 다른 ID를 같고 등록하나? 그래서 경품이 공정하게 나누어지게?
그래도 이상하네 ^^; )
select name,address, max(userid )
from kic_member
where kic_member.userid in (
select userid from kic_member
minus
select id from insurance )
Group by name,address
;
위의 경우는 회원 수가 많을수록 굉장히 느릴겁니다.
보통 in , not in 은 exists, not exists 를 사용하면 성능을 개선할
수 있습니다.
select name,address, max(userid )
from kic_member
where not exists (
select 'X' from insurance
where id = kic_member.userid )
Group by name,address
;
그럼 수고하세요.
> > 글쎄요.
> > "불일치성" 이 뭘까요? 오라클에서 나오는 메세지인가요?
> > 혹시 오라클에서 나오는 메세지나 에러 번호가 있나요?
> > 있다면 제게 메일을 주시던지 댓글 부탁합니다.
> >
> > 제 생각은 insurance , kic_member 테이블이
> > 1:m , m:1 관계가 아니라 혹시
> > m:n 관계가 아닌지 의심도 되네요. m:n 일 경우 조인을 하면
> > 곱집합이 나와서 일반적으로 예상외의 결과가 나올 겁니다.
> >
> > 그리고 m:n일 경우에 조인을 하려면 in-line view를 쓰든가 뷰를 사용해서
> > 먼저 한쪽을 정리한 후에 조인을 하는 것이 조금 빠를 것입니다.
> > ( 물론 가능할 경우에만요 ^^; )
> > 이 경우 예를 들면 먼저 같은 id를 제거하고 조인을 하면 약간의 성능
> > 개선이 있다는 얘기지요.
> >
> > 그런데 name , address가 어느 테이블의 칼럼인지 알수가
> > 없어서 판단을 못하겠네요.
> >
> > 그럼 이만.
>
> 이렇게 자꾸 질문을 해서 죄송합니다 다시 자세히 말씀드리겠습니다
>
> 우선 select name,address,max(userid)
> from insurance , kic_member
> where insurance.id = kic_member.userid
> Group by name,address
> ; 이문장으로 설명을 하면 name,address 는 kic_member의 테이불의 필드명이고요
>
> id 는 insurance의 필드입니다 그리고 M:N 조인입니다 -_- 그래서 여렵죠
>
> kic_member이것이 회원테이불인데 insurance이것은 추첨을 받은 사람 즉)상품받은
>
> 사람을 모아놓은 테이블이지요 그래서 하루에 100명씩 뽑으니까 아이디 비교해서
>
> 같지않은 회원을 뽑아낼려고 하는 쿼리인데... 좀 여렵죠 Anyway 관심 가져주셔서
>
> 감사합니다 - 아직도 책보고있는 고추장 -
> >
> >
|