2011-04-12 6 views
0

를 통해 MS 액세스 2003을 사용하여 가입 :NESTED INNER는 ODBC

SELECT COUNT(t1.ID) AS count FROM Project t1 
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE '%ABC%') t2 ON t1.Site=t2.Site AND t1.id=t2.id 

을하고이 작품 :

SELECT COUNT(t3.ID) AS count FROM Wall t3 
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number 

하지 않는 이유는이 작품 :

SELECT COUNT(t3.ID) AS count FROM Wall t3 
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number 
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE '%ABC%') t2 ON t1.Site=t2.Site AND t1.id=t2.id 

궁극적으로, 나는 첫 번째 SELECT에서 총 개수를 얻으려는 벽 테이블과 같은 10 개의 테이블을 가지고있다 ....

+2

당신이지고 어떤 오류 :

코드는 모두 액세스 문제를 해결하려면? – Elliott

+0

ASP 페이지의 클라이언트 측에서 정의되지 않은 결과 ... SQL 문에 구문 오류가있을 때와 같은 오류입니다. – shaun5

답변

1
SELECT COUNT(t3.ID) AS count FROM Wall t3 
INNER JOIN (Project t1 
INNER JOIN (SELECT DISTINCT t.Site,t.id FROM _Equipment_id t WHERE t.OEM LIKE '%ABC%') t2 
ON t1.Site=t2.Site AND t1.id=t2.id) 
ON t3.Project_number=t1.Project_number 

아마도 구문 오류일까요? 하단에 Office Help은 중첩을 언급합니다. 다른 가능성은 별칭이 어떻게 든 범위가 지정되어 조인에 사용할 수 없지만 MS Access에 대한 전문가는 아닙니다. 어쩌면 별칭을 모두 삭제 해보십시오. 밑줄 문자 (_Equipment_id)와 AS 절 ("별명")로 시작하는 테이블 이름은 SQL 키워드 (AS count)입니다 :

+0

이것은 효과가 있습니다! 내가 wall과 같은 10 개의 테이블에 project_number가 있다면 총 개수를 구하는 가장 간단한 SQL 문은 무엇입니까? (과거에는 배열이나 테이블 이름과 각 카운트를 사용하는 총을 반복 할 것입니다.) – shaun5

+0

쿼리의 맨 아래에'UNION '을 추가하고 다음 Wall 테이블과 동일한 쿼리를 반복 할 수 있습니다. 'UNION'은 모든 쿼리의 결과를 요약해야합니다. 이것이 예상대로 작동하지 않으면'COUNT (t3.ID) AS TotalCount','COUNT (t4.ID) AS TotalCount', ...,'COUNT (tx.ID) AS TotalCount'와 같이 모든 쿼리에서 별칭이 동일하게 유지됩니다. –

+0

고마워, 10 개의 벽 테이블을 가져와 유니언 모두 하나의 큰 테이블을 가지고 두 개의 내부 조인을 추가하기를 바랐다. 그러나이 구문을 작동시키지 못한다. 내 foreach 루프가 잘 작동, 그냥 낭비 보인다 ... – shaun5

0

당신은 당신의 코드에 사소한 문제가 몇 가지있다. 이러한 문제가 해결되면 SQL은 유효한 SQL-92 구문입니다.

슬프게도 문제는 Access (ACE, Jet, 뭐든간에) SQL-92 표준을 지원하지 않는다는 것입니다. Access는 각 중첩 된 JOIN 절을 괄호 안에 넣어야한다고 주장합니다.

[참고 : 괄호 안의 숫자는 쿼리 결과를 잠재적으로 변경시킬 수 있으므로 표준 SQL에서 허용됩니다. 그러나 Access는 코더가 지정한 순서를 따르지 않으며 전나무를보기 위해 JOIN을 평가할 수 있습니다. Standard의 표준을 준수하지 않는 Access 구문뿐 아니라 기능 손실도 있습니다! 그러나 Access이 더 문제는이 특정 쿼리에 대한 나쁜 영향을주지 않습니다]

을 현재 같은 범위에서 두 JOIN의가 있습니다. 귀하의 코드를 묶어 액세스의 문제를 해결해야

... 
INNER JOIN Project t1 ON t3.Project_number=t1.Project_number 
INNER JOIN 
... 

괄호 안의 JOIN; JOIN은 모두 INNER입니다. 따라서 어디로 가도 상관 없습니다. 당신의 AS 절을 수정 관하여

또한, 액세스 다시 표준 SQL의 인용 식별자 (...AS "count"...)를 지원하고 자사의 독점적 인 사각 괄호 구문 (...AS [count]...)를 사용 주장하지 않습니다 - 물론, 다른 이름을 선택할 수 있지만, 거기에 의존하는 응용 프로그램 코드가있을 수 있습니다.

SELECT COUNT(t3.ID) AS [count] 
    FROM (Wall t3 
     INNER JOIN Project AS t1 
      ON t3.Project_number = t1.Project_number) 
     INNER JOIN (
        SELECT DISTINCT t.Site,t.id 
        FROM _Equipment_id AS t 
        WHERE t.OEM LIKE '%ABC%' 
       ) AS t2 
      ON t1.Site = t2.Site 
      AND t1.id = t2.id;