2014-04-14 3 views
0

나는 오라클 독점 코드에서 ANSI 표준으로 변환 중입니다.ANSI 준수 테이블 여러 번 가입

이가 준수 ANSI이다 : 우리는 이러한 진술을했다 WHERE 절 내에서 이전 쿼리 중 하나에

?

FROM people p 
INNER JOIN exam_entries ee on ee.person_code = p.person_code 
INNER JOIN exam_occurrences eo on ee.exam_code = eo.exam_code 
INNER JOIN exam_details ed on ed.exam_code = eo.exam_code 
INNER JOIN exam_entries on ee.board_code = eo.board_code 
INNER JOIN exam_occurrences on eo.board_occurrence = ee.board_occurrence 
INNER JOIN exam_details on eo.board_code = ed.board_code 

후자의 쿼리가 단지 결코 실행하지 않고 계속 결과를 생성합니다

WHERE ee.person_code = p.person_code 
AND eo.exam_code = ee.exam_code 
AND ed.exam_code = eo.exam_code 
AND ee.board_code = eo.board_code 
AND eo.board_occurrence = ee.board_occurrence 
AND eo.board_code = ed.board_code 

나는 다음 시도했다. 이해할 수있는 것 같아요, 나는 테이블에 가입하고 그들을 다시 합류하려고 노력하고있어.

첫 번째 ANSI 준수 제품이 아닌 경우 위의 결과를 어떻게 수정합니까?

답변

2

where에서 조인 조건을 사용하면 ANSI 호환이됩니다. 권장하지는 않지만 준수해야합니다.

쿼리의 문제점은 테이블을 여러 번 언급한다는 것입니다. 그리고 일부 테이블에는 두 번째 exam_entries과 같은 조인 조건이 없습니다.

예의 경우 where 절을 기반으로 여러 조건이 테이블을 관련시킵니다. 이를 위해서는 on 절의 조건을 확장하고 싶습니다. 그래서 당신이 원한다고 생각합니다.

FROM people p INNER JOIN 
    exam_entries ee 
    on ee.person_code = p.person_code INNER JOIN 
    exam_occurrences eo 
    on ee.exam_code = eo.exam_code AND 
     ee.board_code = eo.board_code AND 
     ee.board_occurrence = eo.board_occurrence INNER JOIN 
    exam_details ed 
    on ed.exam_code = eo.exam_code AND 
     ed.board_code = eo.board_code 
+0

오, 아름다운 사람 고든! 그게 가능하다는 것도 몰랐다. 정말 고맙습니다. –