2013-10-14 2 views
0
SELECT 
    s.session_name semester 
FROM 
    lsx.elsp_session s, 
    lsx.elsp_course_offering co, 
    its.ACCOUNT ac 
LEFT OUTER JOIN lsx.elsp_class_attendance ca on ca.course_id = CO.ID and ca.student_number = ac.id 
WHERE co.session_id = s.session_id 

ORA-00904 오류가 발생하며 "CO.ID"가 잘못된 식별자 인 것으로 보입니다. 그러나 "lsx.elsp_course_offering co"테이블을 FROM 목록의 마지막에 놓으면 "ac.id"가 문제 식별자가됩니다.ORA-00904 절에 3 개의 테이블이있는 OUTER JOIN을 사용하는 경우

JOIN 절에 다른 테이블을 사용할 수 있습니까? MySQL을 사용하여 이와 같은 성공적인 쿼리를 작성한 것을 기억합니다.

Oracle 9.2.0.8.0을 사용하고 있습니다. 당신의 도움을

SELECT s.session_name semester FROM lsx.elsp_session s 
    INNER JOIN lsx.elsp_course_offering co 
    ON co.session_id = s.session_id 
    LEFT OUTER JOIN lsx.elsp_class_attendance ca 
    ON ca.course_id = co.id 
    LEFT OUTER JOIN its.account ac 
    ON ca.student_number = ac.id 

많은 감사 : 내가받은 조언에 따라

, 나는 내가 여기에 쿼리를 재 작업 할 때 예상대로 작동 가입을 얻을 수있었습니다.

+0

개인적으로 나는 당신이 이것을하는 방식을 좋아하지 않습니다. 나는 Inner Join (s with co), Cross Join (ac with) 및 하나의 Left Outer (ca)를 봅니다. 조인에 쉼표를 사용하지 말고 해당 조인 절을 사용하십시오. –

+0

찾아 주셔서 감사합니다. 본질적으로 student_id와 course_id의 lsx.elsp_class_attendance 테이블에 참여해야하지만 출석 데이터가 없을 수 있으므로 외부 참여가 필요합니다. –

답변

1

위의 의견을 잘못 이해했을 수 있습니다. 일반적으로 사람들은 여러 FROM 테이블을 JOIN 구문과 함께 사용하지 않습니다.

대신이 방법으로 작성해야한다고 생각합니다. 이 방법을 따르는 것이 더 쉬워야합니다.

SELECT s.session_name semester 
FROM lsx.elsp_session s 
    INNER JOIN lsx.elsp_course_offering co 
    ON co.session_id = s.session_id 
    INNER JOIN its.account ac 
    ON ca.student_number = ac.id 
    LEFT OUTER JOIN lsx.elsp_class_attendance ca 
    ON ca.course_id = co.id 

그런 다음 구문 오류가 있는지 확인하십시오.

관련 문제