2013-02-27 2 views
0

다음 코드 여전히 구문 오류 발생 감소 샘플 이미 다음의 별명오라클 구문 오류

ORA-00904: "R"."READING_TIME": invalid identifier

SELECT r.user_id, rm.reading_time start_time, r.reading_time end_time 
FROM Readings r 
INNER JOIN (
     SELECT r2.user_id, r2.reading_time, r2.x, r2.y 
     FROM Readings r2 
     WHERE r2.user_id=r.user_id and 
      r2.reading_time < r.reading_time 
    ) rm 
ON r.user_id=rm.user_id; 

왜 내부 쿼리 데 문제가 외부 쿼리? 내 바이올린에

링크 : http://sqlfiddle.com/#!4/0d4b5/21

UPDATE: 나는 자기가 조인 일을하고 ON 절 에 상관 쿼리를 이동하여 문제를 해결했다. 전체 스크립트

업데이트 바이올린 : http://sqlfiddle.com/#!4/39032/10

+0

하위 쿼리에 가입 할 수 없기 때문에 필터링해야합니다. Hamlet이 수정 한 구문 오류입니다. – Art

+1

가능한 [시간 간격에 대한 SQL 쿼리]. 구문 오류.] (http://stackoverflow.com/questions/15100254/sql-query-for-time-intervals-syntax-errors) –

+0

@ ypercube - 네 말이 맞아. SQL Server 2008에서 Oracle 11g로 해당 쿼리를 다시 작성합니다. –

답변

2

은 "RM은"인라인보기 때문에 r.user_id, 외부 쿼리 컬럼에 액세스 할 수 없습니다 및 r.reading_time는 내부 쿼리에서 참조 할 수 없습니다. 외부 필터링 필요 :

SELECT r.user_id, rm.reading_time start_time, r.reading_time end_time 
FROM Readings r 
INNER JOIN (
     SELECT r2.user_id, r2.reading_time, r2.x, r2.y 
     FROM Readings r2 
    ) rm 
ON rm.user_id=r.user_id 
AND rm.reading_time < r.reading_time; 
+0

그래서 여기서 상관 관계가있는 하위 쿼리를 사용할 수 없습니까? –

+0

상관 관계가있는 하위 쿼리는 parent from 절의 테이블을 참조하는 where 절에 하위 쿼리가있는 곳입니다. 그러나이 경우는 여기에 적용되지 않습니다. 내가 다시 작성한 쿼리는 올바른 방법입니다. 즉, 인라인 뷰 외부에 조인이 있습니다. (이 간단한 경우에서 부여 된 것처럼, 팜릿이 게시 한 것과 동일하게 단순화 할 수 있지만 실제 SQL은 더 복잡하다고 가정합니다.) – DazzaL

+0

상관 관계 하위 쿼리를 ** ON ** 표현의 일부로 사용할 수 있습니까? –

1

당신은 다른 부분에 가입의 한 부분에서 참조 할 수 없습니다.

이걸 찾으십니까?

SELECT r.user_id, r2.reading_time start_time, r.reading_time end_time 
FROM Readings r 
INNER JOIN Readings r2 
ON r.user_id=r2.user_id 
    AND r2.reading_time < r.reading_time; 

SQL FIDDLE

+0

현재 내 코드가 의미가 없습니다. 구문 오류의 원인을 지역화하려는 시도에서 축소 된 샘플입니다. –

+0

@ PM77-1 업데이트를 참조하십시오. –