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

4

2 に答える 2

2

「rm」インラインビューは外部クエリ列にアクセスできないためr.user_idr.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;
于 2013-02-27T22:11:23.120 に答える
1

JOIN のある部分から別の部分を参照することはできません。

これを探していますか?

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 フィドル

于 2013-02-27T22:07:33.013 に答える