2010-07-21 1 views
0

여기에 스틱의 끝이 잘못되었을 수 있습니다.하지만 외부 조인은 왼쪽 테이블에있는 모든 레코드와 일치하는 모든 레코드를 제공한다고 생각했습니다. 오른쪽 표의 결과 및 일치하는 것이없는 경우의 널 (null) 수입니다.여러 테이블 외부 조인 문제

쿼리 할 테이블이 3 개 있습니다. 사람과 세부 사항은 직접 1 : 1 관계가 있습니다. 세 번째 테이블은 시간입니다. 이 시간은 주당, 일인당, 프로젝트 당 근무 시간을 저장합니다. 나는 각 사람이 내려 놓은 주 수를 필요로한다.

다음은 나에게 각 사용자가 가지고있는 80/100 명을 보여줍니다이 즉 주

SELECT name, detail.clock, COUNT(DISTINCT(week)) 
FROM person, detail,  
WHERE person.ref = detail.person 
AND detail.clock = time.clock 
WHERE time.week >= "2010-07-01" 
GROUP BY detail.clock 

만큼 그들은> 1 내려 놓고대로 까지 시간을 걸었다 주 수를 제공합니다 입력 된 시간.

그러나 아직 다운 타임을 넣어하지 아니한 20 명 볼 필요가, 그래서 나는 다음과 같은 외부

SELECT name, detail.clock, COUNT(DISTINCT(week)) 
FROM person LEFT OUTER JOIN detail ON person.ref = detail.person 
LEFT OUTER JOIN time ON detail.clock = time.clock 
WHERE time.week >= "2010-07-01" 
GROUP BY detail.clock 

에 가입하려고하지만이 정확히 첫 번째 쿼리와 같은 결과를 나를 수 있습니다.

편집 : 방금 문제의 일부를 발견했습니다. 의사 코드의 원래 버전에는 날짜별로 흔들림이 없었습니다. 나는 방금 날짜 필터를 제거하면 쿼리가 예상대로 더 많이 동작한다는 것을 알았습니다. 유용하기에는 너무 느리고 날짜가 중요합니다.

답변