문제

SQL Server 2005에서 링크 된 테이블보기가있는보고에 사용하는 액세스 MDB를 가지고 있습니다. PO 테이블에서 정보를 검색하고 다른 테이블의 정보에 따라 라인 항목을 분류하는 쿼리를 만들었습니다. 기본 애플리케이션 (데이터 생성)이 요구하는대로 서버의 호환 모드 80에서 90까지의 호환성 모드에서 전환 한 약 한 달 전까지는 쿼리가 상대적으로 확실합니다. 나는 이것을 100% 확실하게 말할 수는 없지만, 그것은 지난 90 일 동안 유일하게 주요 변화입니다. 우리는 쿼리에 갑자기 데이터가 나타나지 않다는 것을 알았습니다.

이것은 실패한 쿼리의 사본입니다.

SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
    dbo_opmaster.shortchar01, 
    dbo_porel.ponum, dbo_porel.poline, dbo_podetail.unitcost

FROM ((dbo_porel 
LEFT JOIN dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
    AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
    AND (dbo_porel.jobnum = dbo_joboper.jobnum)) 
LEFT JOIN dbo_opmaster ON dbo_joboper.opcode = dbo_opmaster.opcode) 
LEFT JOIN dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
    AND (dbo_porel.ponum = dbo_podetail.ponum)

WHERE (dbo_porel.jobnum="367000003")

다음을 반환합니다.

jobnum    opcode  jobseqtype  shortchar01  ponum  poline  unitcost
367000003            S                     6624       2      15


쿼리는 일반적으로 Opcode 및 Shortchar01에 대한 값을 표시해야합니다. 링크 된 테이블 dbo_podetail을 제거하면이 필드에 대한 데이터가 올바르게 표시됩니다 (더 이상 UnitCost가 없지만). 처음에는 데이터 문제라고 생각했지만 쿼리를 중첩 한 다음 테이블을 연결하면 잘 작동했습니다.

예를 들어 다음 코드는 완벽하게 작동합니다.

SELECT qryTest.*, dbo_podetail.unitcost

FROM (

    SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
        dbo_opmaster.shortchar01, dbo_porel.ponum, dbo_porel.poline

    FROM (dbo_porel 
    LEFT JOIN dbo_joboper ON (dbo_porel.jobnum=dbo_joboper.jobnum) 
        AND (dbo_porel.jobseq=dbo_joboper.oprseq) 
        AND (dbo_porel.assemblyseq=dbo_joboper.assemblyseq)) 
    LEFT JOIN dbo_opmaster ON dbo_joboper.opcode=dbo_opmaster.opcode

    WHERE (dbo_porel.jobnum="367000003")

) As qryTest 
LEFT JOIN dbo_podetail ON (qryTest.poline = dbo_podetail.poline) 
    AND (qryTest.ponum = dbo_podetail.ponum)


나는 그것이 왜 후자의 경우에 작동하는지에 대한 손실을 입었고 첫 번째 경우에는 그렇지 않습니다. 더 나쁜 것은, 그것은 일부 기록을 위해 간헐적으로 작동하는 것처럼 보이며 다른 기록은 아닙니다 (그것은 작동하고 작동하지 않는 것과 일치합니다).

전문가가 아이디어가 있습니까?

도움이 되었습니까?

해결책

액세스의 여러 왼쪽/오른쪽 조인에 하위 쿼리를 사용해야합니다.
왼쪽/오른쪽 결합을 체인하는 경우 혼란스러워하는 제트 최적화 제한의 한계라고 생각합니다.

당신은 할 수 있습니다 이것이 반복적 인 문제라는 것을 알 수 있습니다 그 표면은 종종.

다른 팁

나는 결합에 괄호의 사용에 대한 액세스에 항상 혼란스러워합니다. 여분의 괄호를 벗기십시오.

FROM 
    dbo_porel 
LEFT JOIN 
    dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
        AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
        AND (dbo_porel.jobnum = dbo_joboper.jobnum)
LEFT JOIN 
    dbo_opmaster ON (dbo_joboper.opcode = dbo_opmaster.opcode)
LEFT JOIN 
    dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
        AND (dbo_porel.ponum = dbo_podetail.ponum)

OK 위의 일이 작동하지 않습니다 - 죄송합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top