2009-06-29 2 views
3

이것은 이전 질문과 관련이 있습니다. More than 1 Left joins in MSAccessMS Access에서 둘 이상의 왼쪽 조인 문제

문제는 3 개의 왼쪽 조인과 1 조건을 검사하는 AND 연산자가 있다는 것입니다.

내가 실행하면 "Join Expression not supported" 오류가 발생합니다.

쿼리는 다음과 같이됩니다.

SELECT * FROM((EMPLOYEE AS E LEFT JOIN DEPARTMENT AS D ON E.EID=D.EID) 
       LEFT JOIN MANAGERS M ON D.DID=M.DID) 
      LEFT JOIN MANAGERDETAILS MD ON M.MDID=MD.MDID 
**AND E.ENO=MD.ENO** 

AND 부분을 제거하면 올바르게 작동합니다.

좋은 생각이야?

+1

당신은 당신의 합류를 손으로 쓰고 있습니까, 아니면 QBE가 당신을 위해 쓰도록 하시겠습니까? 나는 그것을 QBE가하도록하는 것이 더 효과적이라는 것을 알았다. –

+1

어쩌면 내가 누락되었지만 조인이 실제로 작동하는 순서를 설정할 수 없기 때문에 다중 LEFT JOIN이 QBE에서 올바르게 지원되지 않습니다. 여러 조인은 엉망이되어 결국 기대하지 않는 경우가 많습니다. 저는 대개 더 복잡한 쿼리를 위해 항상 SQL을 사용해야하므로 쿼리 작성 방법을보다 잘 제어 할 수 있습니다. –

+0

이 쿼리는 복잡하지 않습니다. QBE를 사용하십시오. – JeffO

답변

4

방법은 :

SELECT EDM.*, MANAGERDETAILS.* 
FROM (
    SELECT ED.*, MANAGERS.* 
    FROM (
     SELECT EMPLOYEE.*, DEPARTMENT.* 
     FROM EMPLOYEE 
     LEFT JOIN DEPARTMENT 
     ON EMPLOYEE.EID = DEPARTMENT.EID 
    ) AS ED 
    LEFT JOIN MANAGERS 
    ON ED.DID = MANAGERS.DID 
) AS EDM 
LEFT JOIN MANAGERDETAILS 
ON EDM.MDID = MANAGERDETAILS.MDID 
    AND EDM.ENO = MANAGERDETAILS.ENO 

기본적으로, 당신은 테이블에게 시간과 별명은 그 다음 가입에 사용할 수있는 결과를 하나 가입 할 수 있습니다.

더 작은 하위 집합의 별칭을 지정하면 Access에서 임의로 복잡한 Left 조인을 수행 할 수 있습니다. 이중 조인 절은 해당 멤버 중 하나가 해당 쿼리 수준에서 볼 수있는 결과 집합보다 더 깊은 결과 집합을 참조하기 때문에 작동하지 않습니다.

0

ON 절에서 두 개의 fileds를 일치 시키려하고 있으며 테이블 중 하나가 MANAGERDETAILS입니다.

이 SQL과 함께 무엇을 얻으려고하는지 모르지만 AND 필터를 올바른 ON (E.EID = D.EID 다음에)하거나 필터를 적용 할 테이블을 변경할 수 있습니다 현재 ON으로 필드 중 하나가 MANAGERDETAILS에 속합니다.

+0

당신은 을 선택 하시겠습니까? * (D. (E (E) = EE = D.EID (EE = DEID)에 왼쪽으로 JOIN DEPARTMENT로 고용 됨) 왼쪽에있는 JOIN MANAGERS M : D.DID = M.DID) M.MDID = MD.MDID에 MD를 남기십시오. E.ENO = D.ENO 이 경우에도 오류가 발생합니다. 위 쿼리를 다시 작성해주십시오. 결과에 대해 걱정하지 마십시오. –

+0

이것은 내가 의미 한 바입니다. SELECT * FROM (((EEID = E.EID = E.E. MDID = MD.MDID에 MD를 남기십시오.) –

0

관리자의 직원 레코드를 가져 오기 때문에 Employee 테이블에 대한 두 번째 참조가 필요합니다.

SELECT * ( ( (E LEFT AS EMPLOYEE가 E.EID D.EID = ON D AS학과 가입) LEFT이 D.DID = ON M.DID M AS MANAGERS 가입 ) LEFT FROM MAN MDERDETAILS 그대로 MD ON M.DID = MD.MDID ) 왼쪽 JOIN EMPLOYEE E2 ON MD.ENO = E2.ENO;

예상되는 데이터에 대한 정보가 충분하지 않지만이 쿼리가 실행됩니다.

저는 Access에서 괄호를 처리해야한다는 것을 알고 있지만 그래픽 쿼리 작성기를 사용하여이 작업을 수행 할 수 있습니다. 나는이 될 것이라고 작성합니다

+0

MS Access에서 둘 이상의 왼쪽 조인을 수행하려는 경우 From 절에 괄호를 사용해야하므로 –

+0

이 설명됩니다. "Access에서 당신은 괄호를 처리 할 필요가 있습니다." – JeffO