2013-04-30 5 views
0

여기에 구축 한 쿼리가 상당히 복잡합니다. 이 작업은 아직 승인되지 않은 문서에 대한 모든 세부 정보를 선택하고 문서 참조 목록 및 해당 문서를 제출 한 사용자의 이름을 반환합니다. 그럼 내가하고 싶은 일은 결과에 표를 조인하여 아직 그 문서에 대한 승인을 아직 등록하지 않은 모든 사용자를 얻는 것입니다 (이는 중첩 된 선택에서 수행하고있는 것입니다, 즉 approvalstatus = . 나는 LEFT이 같은 위의 쿼리 중첩에 가입하려고 노력Oracle에서 이중 중첩 된 선택으로 왼쪽 조인

SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj, 
     m.xreference,  
     m.xversion, 
     a1.assignedtoname, 
     a1.actiondate 
FROM documentapprovers a1, 
     docmeta m, 
     (SELECT DISTINCT a2.documentid 
     FROM documentapprovers a2 
     WHERE a2.approvalstatus = 'Pending') penders 
WHERE penders.documentid = a1.documentid 
     AND m.did = a1.documentid 
     AND a1.approverrole = 'Author' 
     AND a1.approvertitle = 'Author' 
     AND a1.actiondate <= SYSDATE - interval '3' month 
ORDER BY proj ASC, a1.assignedtoname DESC, m.xreference asc 

내가 추가하여 필요에 레코드를 식별하는 데 필요한 어떤 '보류 :

SELECT a3.assignedtoname, a4.* 
FROM (SELECT substr(m.xreference,1,instr(m.xreference,'/')-1) Proj, 
       a1.documentid, 
       m.xreference,  
       m.xversion, 
       a1.assignedtoname, 
       a1.actiondate 
     FROM documentapprovers a1, 
       docmeta m, 
       (SELECT DISTINCT a2.documentid 
       FROM documentapprovers a2 
       WHERE a2.approvalstatus = 'Pending') penders 
     WHERE penders.documentid = a1.documentid 
       AND m.did = a1.documentid 
       AND a1.approverrole = 'Author' 
       AND a1.approvertitle = 'Author' 
       AND a1.actiondate <= SYSDATE - interval '3' month) a4 
LEFT JOIN documentapprovers a3 
ON a3.documentid = a4.documentid 

을하지만 명령이있는 오류 제대로 끝나지 않았습니다. 나는 계속해서 그것을 끝내고 나에게 완벽하게 끝났습니다. 누구든지 도울 수 있습니까?

오라클의 아주 오래된 버전입니다. 8i로 생각합니다.

답변

1

Oracle 8i는 매우 오래되었고 ANSI 조인은 버전 9i까지 구문의 일부가 아니 었습니다.

독점적 인 Oracle 외부 조인 구문 FROM a4, a3 WHERE a4.documentid = a3.documentid (+)을 사용해보십시오.

+0

우수! 나는 그것이 JOIN 문을 작동시킬 수 없었기 때문에 이것이 의심스럽지 만, 나는 코드에있는 실수가 내가 일하는 데 익숙한 JOIN을 받아들이는 것보다 더 많은 가능성이 있다고 생각했다. – deed02392