2010-08-19 3 views
1

액세스에서 작동하지 않는 가입 :액세스 왼쪽 내가이 쿼리 썼다 제대로

Select 
    I.sysid, I.MemberNumber, I.Date, I.Distributer, 
    F.MemberNumber as FMember, F.Date as FDate, I.Distributer as FDistributer 
From Initial as I 
Left Join Final as F ON 
    I.MemberNumber=F.MemberNumber and 
    I.Distributer=F.Distributer and 
    I.Date>=F.Date-14 and 
    I.Date<=F.Date+14; 

을하지만 왼쪽에 가입 제대로 작동하지 않습니다. 이 테이블에는 행 수가 적습니다. 그 다음에는 이니셜에 있습니다 ...하지만 왼쪽 조인을 사용하고 있기 때문에 초기 행에서 모든 행을 유지해야합니다. sysid = 7과 같이이 테이블에 들어오지 않는 초기 (Initial 's) 키가 여러 행을 발견했습니다.

+0

비동기 조인 기준을 WHERE 절로 이동하십시오. 예 : LEFT JOIN 최종 AS F ON I.MemberNumber = F.MemberNumber AND I.Distributer = F.Distributer WHERE I.Date> = F.Date- 14 AND I.Date <= F.Date + 14 - 이것은 명시 적 암묵적 조인이 아니며 Jet/ACE에서 동일한 방식으로 최적화 될 가능성이 있지만 문제를 쉽게 해결할 수 있습니다. –

답변

0

원본 테이블에 필드를 추가하고 업데이트 쿼리를 사용하여 추가 열을 추가하십시오. 이렇게하면 열을 삭제하지 않을 것입니다.

2

귀하의 AND 논리와 관련이있을 수 있습니다. 과 같이 모든 것을 포함하는이 일부() 괄호를 추가

Select 
    I.sysid, I.MemberNumber, I.Date, I.Distributer, 
    F.MemberNumber as FMember, F.Date as FDate, I.Distributer as FDistributer 
From Initial as I 
Left Join Final as F ON 
    (I.MemberNumber=F.MemberNumber and 
    I.Distributer=F.Distributer and 
    (I.Date>=F.Date-14) and 
    (I.Date<=F.Date+14)); 

또한 나는 dateadd function 있다고 생각, 내가 대신 + /의를 사용하는 것 -.

+0

괜찮은 제안이지만 작동하지 않았습니다. 나는 여전히 sysID = 7로 시작하는 줄을 얻지 못하고있다. (다른 곳에서도 무리가있다.) 이상한 부분은 sysID = 7에서 결과를 필터링하면 선을 찾지 만 필터가 없으면 (예 : 정렬하거나 maketable로 만들 때와 같이 7이 없다는 것입니다.) 그래서 기괴한. 다른 제안? – Dan

+2

@ Dan - 코드를 줄이면 대답을 찾는 것이 쉽습니다. 그래서 날짜를 포함하는 AND 조건을 제거하십시오. 쿼리를 실행하여 데이터를 가져 왔는지 확인하십시오. 그런 다음 I와 F의 MemberNumber가 실제로 일치하는지 확인하십시오. 분명히 진짜 단순한 것입니다 (null이거나 일치하지 않음, 날짜 문제 등). – JonH

+0

Jet/ACE 날짜 필드의 정수 부분이 요일이므로 계산이 날짜 일 경우 DateAdd()가 필요하지 않습니다. –

1

쿼리 디자이너를 사용하는 경우 모든 필터가 지워 졌는지 확인하십시오. 나는 테이블과 SQL을 구축 했으므로 에러를 재현 할 수 없다.

SELECT I.sysid 
    , I.MemberNumber 
    , I.Dated 
    , I.Distributer 
    , F.MemberNumber 
    , F.Dated AS FDated 
    , F.Distributer AS FDistributer 
FROM Initial AS I 
LEFT JOIN Final AS F 
ON I.Distributer = F.Distributer 
     AND I.MemberNumber = F.MemberNumber 
     AND I.Dated>=F.Dated-14 
     AND I.Dated<=F.Dated+14; 
관련 문제