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_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;
于 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 回答