Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接到子查询时出现Oracle语法错误_Sql_Join_Oracle11g_Subquery - Fatal编程技术网

Sql 连接到子查询时出现Oracle语法错误

Sql 连接到子查询时出现Oracle语法错误,sql,join,oracle11g,subquery,Sql,Join,Oracle11g,Subquery,以下代码已经是一个简化的示例,仍然会产生语法错误: ORA-00904:R.读取时间:无效标识符 为什么内部查询与外部查询的别名有问题 链接到我的小提琴: 更新: 我通过执行自连接并将相关查询移动到ON子句解决了这个问题 更新了整个脚本:您不能从JOIN的一个部分引用到另一个部分 你在找这个吗 SELECT r.user_id, r2.reading_time start_time, r.reading_time end_time FROM Readings r INNER JOIN Read

以下代码已经是一个简化的示例,仍然会产生语法错误:

ORA-00904:R.读取时间:无效标识符

为什么内部查询与外部查询的别名有问题

链接到我的小提琴:

更新: 我通过执行自连接并将相关查询移动到ON子句解决了这个问题


更新了整个脚本:

您不能从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;

不能从联接的一个部分引用到另一个部分

你在找这个吗

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;

rm内联视图无法访问外部查询列,因此无法在内部查询中引用r.user\u id和r.reading\u 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;

rm内联视图无法访问外部查询列,因此无法在内部查询中引用r.user\u id和r.reading\u 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;

因为您不能加入子查询。这是哈姆雷特纠正的语法错误。@ypercube可能重复-你说得对。我正在将该查询从SQL Server 2008重写为Oracle 11g。因为您无法加入子查询。这是哈姆雷特纠正的语法错误。@ypercube可能重复-你说得对。我正在将该查询从SQL Server 2008重写为Oracle 11g。我的代码目前没有任何意义。这只是一个简化的示例,试图定位语法错误的来源。我的代码目前没有任何意义。这只是一个简化的示例,旨在定位语法错误的来源。因此,我不能在此处使用关联子查询?关联子查询是指where子句中有一个子查询,该子查询引用父from子句中的表,但这种情况在此处不适用。我重新编写您的查询的方式是正确的,也就是说,在这个简单的例子中,您可以将内联视图之外的连接授予,我们可以简化为与hamlet发布的内容相同的内容,但我假设您的实际SQL更为复杂。如果我有一个相关子查询作为ON表达式的一部分?@PM77-1 yes。i、 你可以选择。。从taba a中,在a.id=b.id和a.id上连接tabb b b,从tabc c中选择c.val,其中c.id=a.ids,我不能在此处使用关联子查询吗?关联子查询是指where子句中的子查询引用父from子句中的表,但这种情况不适用于此处。我重新编写您的查询的方式是正确的,也就是说,在这个简单的例子中,您可以将内联视图之外的连接授予,我们可以简化为与hamlet发布的内容相同的内容,但我假设您的实际SQL更为复杂。如果我有一个相关子查询作为ON表达式的一部分?@PM77-1 yes。i、 你可以选择。。从taba a中,在a.id=b.id和中的a.id上连接tabb,从tabc c中选择c.val,其中c.id=a.id