나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 노상술 (crmyriam)

추천:  0
파일:     조회:  1093
제목:   Left Join 질문입니다.
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

1. 액세스 버전(95,97,2000,2002): 2000
2. 윈도우즈의 버전(win95,win98,winME,winNT,win2000,winXP):win98se
3. CPU (486,PentiumI/II/III/IV...):
4. RAM (32,64,128,256,512MB,1G...): 

* 아래줄에 질문을 작성하세요 >> 
아래와 같은 쿼리를 작성했는데 출력이 이상하게 나옵니다.
left join 이면 왼쪽 테이블인 aa테이블에서는 자료가 다 나오는것으로
알고 있는데 aa에 있고 ss에 없는것이 안나옵니다.
마지막 where 절에서 잘못이 있는것인지 inner join 처럼 나와서요
where 조건중 aa.drno1 = '701203' 은 임시로 확인하기 위해 줬지만
ss.yy = '2004'는 꼭 줘야되는 조건입니다.

SELECT 
 aa.name, 
 aa.drno1, 
 ss.drno2
FROM
 aa left join ss on aa.drno1=ss.drno1 and aa.drno2=ss.drno2
WHERE
 ss.yy = '2004' and aa.drno1 = '701203';

그리고 아래는 도움말 내용인데요
on 조건을 중복시 on ~ and on ~  이런식으로 되어있는데
and on 이라고 하면 에러가 나고 그냥 and 로 해야 에러가 안나던데
도움말이 잘못된것인가요??
SELECT fields
FROM table1 INNER JOIN table2 
ON table1.field1 compopr table2.field1 AND 
ON table1.field2 compopr table2.field2) OR 
ON table1.field3 compopr table2.field3)];

 
[불량 게시물 신고]  
Crocii데이터가 늘어나는 것은 다대다 관계이기 때문입니다..
aa.drno1 & aa.drno2 가 어느 한쪽테이블은 중복되는 것이 없어야 합니다..

조건을 주면 조건에서 걸러지는 것에 해당되는 aa쪽의 레코드는 당연히 같이 걸러집니다.
이런식으로 해보세요..
SELECT 
 aa.name, 
 aa.drno1, 
 sss.drno2
FROM
 aa left join (select drno1, drno2 From ss where yy='2004) as sss on aa.drno1=sss.drno1 and aa.drno2=sss.drno2
WHERE
aa.drno1 = '701203';

도움말이 그런가요? 이상하군요..
10-11 (16:40)
삭제 ■신고
노상술다대다 관계인것은 조건을 추가하고 Crocci님 답변대로
해봤더니 잘 되는군요.
(자료가 많아서 시간이 걸리는 단점을 제외하고는요)
where 조건에 오른쪽테이블은 써주면 안되나 보네요.
사실 원하는 것은 aa테이블자료중 ss에 있는자료를
제하고 자료를 추출하려는데 검색해보니 left 조인을
이용해서 오른쪽테이블자료가 null 인것을 뽑으라고
나와있어서 하는중이었거든요.
답변감사드립니다.
그리고 오피스2000 의 도움말에 에러가 좀 있나봅니다.
위의 질문에 있는것도 도움말을 그대로 복사해온 것이고
엑셀의 Sum함수 설명에도 오류가 있답니다.
sum함수 도움말중 아래부분이 있는데
"배열이나 참조 영역의 빈 셀, 논리값, 텍스트,
 오류값은 무시됩니다."
"오류값은 무시"된다는 말이 틀리더군요. 오류값은 오류가...
 97버전은 확인 못했는데
 xp,2003은 제대로 되어있다고 합니다.
10-11 (17:06)
삭제 ■신고
Crocii일단.. 배움터의 데일리팁의 액세스팁의 데이터백만건만들기를 보시고..

보셨으면..
left join 을 하면
아래와 같이 레코드가 생성되는 레코드중
(A,A)
(A,B)
(B,A)
(B,B)
(C,A)
(C,B)
Left, right가 일치하는 레코드와
선택되지 않은 Left가 아래처럼 추가 됩니다.
(C,Null)
즉.. 이렇게 되겠지요..
(A,A)(B,B)(C,Null)
이중에 right에 조건을 걸어 B가 제외 되면 아래와 같이 최종 결과가 나올 겁니다.
(A,A)(C,Nnull)
즉 A와 C 만 남게 되는 것이지요..
right 쪽의 레코드가 조건에 의해 걸러지면 그에 해당하는 Left쪽의 레코드도 같이 걸러집니다..
만약에 right쪽에 D가 있고 이것이 조건에 의해 걸러지면..
Left에 아무 영향도 못 미치겠지요..
10-11 (17:47)
삭제 ■신고
노상술알콜을 섭취하고와서 봤더니...
이해를 잘 했는가는 모르겠지만 right쪽이 걸러지면 left쪽도
걸러진다는 말이 핵심인거 같습니다.
부탁받았던 자료인데 덕분에 해결해서 줬습니다.
자세한 설명 감사드립니다.
10-11 (23:10)
삭제 ■신고
        
  

작성일 : 2004-10-11(15:21)
최종수정일 : 2004-10-11(16:25)