2013-06-03 1 views
0

실행하면 오류 메시지가 나타납니다. 왜 그런지 알아? Access 디자인보기를 사용하여 빌드했습니다.모호한 외부 조인이 포함되어 있기 때문에 SQL 문을 실행할 수 없습니다. 어디에?

SELECT [Sales structure].Cluster , 
     [Sales structure].Country , 
     [Transaction details].[Sales company code] , 
     [Sales structure].[Sales company name] , 
     YEAR([Transaction details].[YYYY-MM-DD]) AS [Year] , 
     MONTH([Transaction details].[YYYY-MM-DD]) AS [Month] , 
     SUM([Transaction details].[Sales volume LOC]) AS Total , 
     [Transaction details].[Currency code] , 
     Currencies.[CUR/EUR] AS [Currency rate] 
FROM Items , 
     Currencies 
     RIGHT JOIN ([Sales structure] 
        RIGHT JOIN [Transaction details] ON [Sales structure].[Sales company code] = [Transaction details].[Sales company code] 
        ) ON Currencies.[Currency code] = [Transaction details].[Currency code] 
GROUP BY [Sales structure].Cluster , 
     [Sales structure].Country , 
     [Transaction details].[Sales company code] , 
     [Sales structure].[Sales company name] , 
     YEAR([Transaction details].[YYYY-MM-DD]) , 
     MONTH([Transaction details].[YYYY-MM-DD]) , 
     [Transaction details].[Currency code] , 
     Currencies.[CUR/EUR] 
HAVING (([Transaction details].[Currency code] = [Currencies].[Currency code])) 
ORDER BY YEAR([Transaction details].[YYYY-MM-DD]) , 
     MONTH([Transaction details].[YYYY-MM-DD]) ; 
+0

이 부분은 'FROM Items, Currency'입니다. 다른 테이블과'Items'을 결합하지 않았습니다. –

+0

감사합니다. 고쳤다! – user1283776

+0

하지만 지금은 다른 문제가 있습니다. 액세스는 "[거래 세부 사항]에서 불만을 제기합니다 [통화 코드] = [통화] [통화 코드]"귀하의 쿼리에 지정된 [거래 내역]이 없습니다 "[통화 코드] = [통화] [통화 코드 ] 집계 함수의 일부로 – user1283776

답변

3

ItemsCurrencies 테이블 사이에 JOIN 조건이 없습니다. 그들은 단순히 쉼표로 소개됩니다.

MS 액세스는 조인 (join)에 대해 매우 특별합니다. 또한 각 조인 주위에 괄호를 넣을 수도 있습니다. 누락 된 괄호에 대해 구두점을 사용할 수 있기 때문에 문법적으로 문제가없는 구문이 올바른 경우에도 마찬가지입니다.

쉼표 ,을 사용하고 WHERE 절에 조인 조건을 넣어 테이블을 조인 할 수 있다는 사실을 잊지 마십시오. 이것은 구식이며 버려 져야합니다! JOIN 절을 사용하여 (첫 번째 테이블 다음에) 도입 된 ANSI SQL 조인을 사용하고 ON 절과 조인하십시오. 여기에는 여러 가지 이유가 있습니다. 더 많은 것을 이해하고 싶다면 온라인 검색을하십시오.

+2

암시 적 조인과 명시 적 조인을 결합해야하는 데이터베이스가 없다면 명시 적 조인이 where 절 이전에 평가되므로 잘못된 결과를 얻을 수 있습니다 (where 절 얼마나 많은 질문이 있었는지 궁금해했다.) 실제로, implict 조인을 사용하는 것은 SQL 반 패턴이다. – HLGEM

+0

좋은 점, @HLGEM!이 부분을 해결하기 위해 내 답변에 더 추가했다. – ErikE

관련 문제