2014-04-23 1 views
2

일부 조인 쿼리로 재생하려고했는데 내 쿼리를 내부 조인에서 외부 조인으로 전환하고 다른 모든 항목을 그대로두면 일부 비정상적인 동작을 발견했습니다. 아래의 두 쿼리가 실행 중입니다. 내부 조인 전환을 바깥 쪽의 잘못된 식별자

A screenshot of an SQL Query returning successfully

그리고

SELECT Staff.Fname AS "First Name", Staff.Lname AS "Second Name", Booking_ID 
FROM Staff INNER JOIN Booking ON Staff.StaffID = Booking.StaffID; 

나는 주위를 전환 할 때,

SELECT Staff.Fname AS "First Name", Staff.Lname AS "Second Name", Booking_ID 
FROM Staff OUTER JOIN Booking ON Staff.StaffID = Booking.StaffID; 

나는 Error ORA-00904 Invalid identifier "Staff"."StaffID"를 얻을.

위의 쿼리는 예약을하지 않은 모든 사람뿐만 아니라 예약자와 함께 예약을 한 모든 직원을 반환해야한다고 생각했습니다.

아이디어가 있으십니까?

+0

다시 INNER JOIN (으)로 전환하면 쿼리가 계속 작동합니까? –

+0

이 데이터에 대한 외부 조인이 필요한 이유가 있습니까? 또한 두 테이블의 테이블 구조를 보면 도움이 될 수도 있습니다. –

+0

예, Joseph이 다시 전환되었을 때 쿼리가 계속 작동합니다. – Dobhaweim

답변

5

OUTER JOIN 대신 LEFT OUTER JOIN (또는 전체 또는 오른쪽)을 입력해야하는 문제가 있습니다. 오라클은 SQL에서 OUTER을 테이블 별칭으로보고 있습니다. 즉, 그것은으로 읽는 것입니다 : 그것은 이상하게 보일 것이지만

SELECT Staff.Fname AS "First Name", Staff.Lname AS "Second Name", Booking_ID 
    FROM Staff foo 
     JOIN Booking ON Staff.StaffID = Booking.StaffID; 

이 실제로 작동합니다 :

SELECT OUTER.Fname AS "First Name", OUTER.Lname AS "Second Name", Booking_ID 
    FROM Staff OUTER JOIN Booking ON OUTER.StaffID = Booking.StaffID; 
오라클은 내부 간단한 STAFF 테이블 사이에 조인으로 이것을 볼 것이다

(OUTER 별칭으로), 그리고 예약하기.

기본적으로 OUTER키워드하지만 오라클의 예약 단어입니다. 즉, 특별한 의미가 있지만 여전히 별칭으로 사용할 수 있습니다.

+2

수정 사항은 외부 조인을 사용하는 방법에 따라 OUTER JOIN 대신 FULL OUTER JOIN, RIGHT OUTER JOIN 또는 LEFT OUTER JOIN을 사용하는 것입니다. 오라클 SQL은 매우 재미 있습니다. –

+0

글쎄, 내가 이것을 (4 분) 받아 들일 수 있다면 대답으로 받아 들일 것입니다. 나는 이것을 보았을 때 왜 구글이 많은 별칭 관련 질문을 던지고 있는지 궁금해했다. – Dobhaweim

+0

@MarshallTigerus 예, 당신 말이 맞습니다. 나는 그냥 왼쪽 생각했다. 내 답변을 FULL 및 OUTER를 포함하도록 업데이트했습니다. – Joe