2014-01-17 2 views
1

인터넷에서 찾을 수있는 모든 자료를 검토 했음에도 불구하고 직접이 문제를 해결할 수 없었습니다. 나는 MS Access에 익숙하지 않으며 모든 포인터에 정말 감사 할 것입니다. 여기 내 문제 야 - 열 부서, 하위 부서, 법인, 계정, + 몇 세 개의 테이블에 가입 할 때 레코드 수가 일치하지 않습니다.

  • R12CAOmappingTable - - 나는 열이 세 개의 테이블

    1. Source1084이 계정, R12_Account
    2. 표 4를 열이 - R12_Account , Department, Sub-Dept, Entity, New Dept, LOB + more

    원본에 총 1084 개의 레코드가 있으며 결과 테이블에도 1084 개의 레코드가 있어야합니다. R12CAOmappingTable + Table4의 모든 열에서 Source + R12_account의 모든 열이있는 테이블을 그려야합니다.

    여기에 내가 작성한 쿼리가 있습니다. 이 경우 오른쪽 열이 생성되지만 서로 다른 조인 옵션을 교환하여 레코드 수가 많거나 적습니다.

    SELECT rmt.r12_account, 
         srb.version, 
         srb.fy, 
         srb.joblevel, 
         srb.scenario, 
         srb.department, 
         srb.[sub-department], 
         srb.[job function], 
         srb.entity, 
         srb.employee, 
         table4.lob, 
         table4.product, 
         table4.newacct, 
         table4.newdept, 
         srb.[beg balance], 
         srb.jan, 
         srb.feb, 
         srb.mar, 
         srb.apr, 
         srb.may, 
         srb.jun, 
         srb.jul, 
         srb.aug, 
         srb.sep, 
         srb.oct, 
         srb.nov, 
         srb.dec, 
         rmt.r12_account 
    FROM (source1084 AS srb 
         LEFT JOIN r12caomappingtable AS rmt 
           ON srb.account = rmt.account) 
         LEFT JOIN table4 
           ON (srb.department = table4.dept) 
           AND (srb.[sub-department] = table4.subdept) 
           AND (srb.entity = table4.entity) 
    WHERE (((srb.[sub-department]) = table4.subdept) 
         AND ((srb.entity) = table4.entity) 
         AND ((rmt.r12_account) = table4.r12_account)); 
    
  • +0

    감사합니다. 그러나 언급 한 쿼리는 아무 값도 반환하지 않습니다. Where 절까지만 사용하면 결과가 표시되지만 Table4의 열에 대해서는 값이 반환되지 않습니다. – Pri2304

    답변

    0

    테이블 값을 모르면 질문에 대한 완전한 대답을하기가 어렵습니다. 설명 방법에 따라 문제를 일으키는 문제입니다. 사용중인 조인 유형에 따라 가능성이 큽니다.

    내가 사용해야하는 조인 유형을 이해하는 가장 좋은 방법은 사용할 수있는 조인 유형을 설명하는 Venn 다이어그램을 참조하는 것입니다.

    enter image description here

    제프 앳 우드는 SQL의 정말 좋은 설명뿐만 아니라 위의 방법을 사용하여 his site에 조인 있습니다.

    0

    쿼리 빌더를 사용하는 것이 가장 좋습니다. 주 테이블에 내려 놔. 원하는 열을 선택하십시오. 이제 다른 조회 값 중 하나를 선택하면 다른 테이블에 놓고 조인 선을 그립니다. 두 번 클릭하고 왼쪽 조인을 사용합니다. 다른 테이블에서 다른 값을 "가져 오거나"조회해야하는 2 열 또는 30 열의 경우이 작업을 수행 할 수 있습니다. 리턴 된 기본 테이블의 ORIGINAL 행 수는 항상 같아야합니다.

    쿼리 빌더를 사용하고 위의 단계를 따르십시오.

    게시 된 SQL 문제는 inside() 조인을 중첩했다는 것입니다. 그러지 마. (또는 쿼리 빌더가이 작업을 수행하도록하십시오 - 그들은 상당히 엉뚱한 경향이 있지만 또한 효과가 있습니다).

    그냥 이것을 사용하면 where 절에서 다시 조건을 "반복"왜

    언급 한 바와 같이
    FROM source1084 AS srb 
    LEFT JOIN r12caomappingtable AS rmt 
         ON srb.account = rmt.account 
    LEFT JOIN table4 
          ON (srb.department = table4.dept) 
          AND (srb.[sub-department] = table4.subdept) 
          AND (srb.entity = table4.entity) 
    

    , 내가 볼 수 없습니다.

    +0

    Doesnot 작동하지 않습니다. 아마도 나는 Access에서 일하고 있습니다. 그래도 고마워. – Pri2304

    1

    이 간단한 예제에서 Table1은 고유 한 fld1 값을 가진 3 개의 행을 포함합니다. Table2에는 하나의 행이 포함되어 있고 해당 행의 fld1 값은 Table1에있는 값 중 하나와 일치합니다. 따라서이 쿼리는 3 개의 행을 반환합니다.나는 아래와 같은 WHERE 절을 추가하는 경우

    SELECT * 
    FROM 
        Table1 AS t1 
        LEFT JOIN Table2 AS t2 
        ON t1.fld1 = t2.fld1; 
    

    그러나 쿼리의 버전은 하나의 행 --- 행 fld1 값이 일치를 반환합니다. 이 t2.fld1가 NULL 인 행을 제외하기 때문에 WHERE 절은 LEFT JOIN을 중화하는 것이 즉

    SELECT * 
    FROM 
        Table1 AS t1 
        LEFT JOIN Table2 AS t2 
        ON t1.fld1 = t2.fld1 
    WHERE t1.fld1 = t2.fld1; 
    

    . 그 말이 맞는다면 두 번째 쿼리는 기능적으로 다음과 같습니다.

    SELECT * 
    FROM 
        Table1 AS t1 
        INNER JOIN Table2 AS t2 
        ON t1.fld1 = t2.fld1; 
    

    상황은 유사합니다. 처음에 WHERE 절을 제거하고이 쿼리가 이상을 반환하고 사용자의 예상 된 1084 개 행이 적어도임을 확인하십시오. 당신이 행의 정확한 수를 반환하는 쿼리를 얻을 후

    SELECT Count(*) AS CountOfRows 
    FROM (source1084 AS srb 
         LEFT JOIN r12caomappingtable AS rmt 
           ON srb.account = rmt.account) 
         LEFT JOIN table4 
           ON (srb.department = table4.dept) 
           AND (srb.[sub-department] = table4.subdept) 
           AND (srb.entity = table4.entity); 
    

    , 당신은 당신이 원하는 열을 반환하는 SELECT 목록을 변경할 수 있습니다. 그러나 정확한 행을 얻을 때까지는 열이 실제로 문제가되지 않습니다.

    관련 문제