以下代码已经是一个仍然会产生语法错误的简化示例:
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 子句来解决问题。
答案 0 :(得分: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;
答案 1 :(得分: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 FIDDLE 强>