首页 > 解决方案 > 为什么 SQL 子查询中的外部引用会产生不同的结果?

问题描述

我运行了两个 SQL 查询:第一个对子查询中的表有一个外部引用。在第二个中,我在子查询中添加了同一个表。结果不同,由于多行而失败。

第一个在 Oracle 上运行,但在 Spark-SQL 上失败。因此,我正在寻找类似于第一个 SQL 代码中的 Oracle SQl 的解决方案。

查询一:

select *, 
(select N_CODE 
from table2 f 
where f.ID1 = (select min(f.ID1) 
               from table1 a left join table2 f on a.ID2 = f.ID2
               where a.ID2 = table1.ID2 
               ) 
) AS CODE

from table1

查询 2:

select *, 
(select N_CODE 
from table1 t, table2 f 
where f.ID1 = (select min(f.ID1) 
               from table1 a left join table2 f on a.ID2 = f.ID2
               where a.ID2 = t.ID2 
               ) 
) AS CODE

from table1

第二个是我对 Spark SQL 中第一个的解决方案,但它在 Oracle 和 Spark 上都失败了。如何在类似于 Oracle 的 Spark SQL 上运行第一个查询?

请不要修改查询的结构。

标签: sqloracleoracle11gapache-spark-sql

解决方案


Oracle 支持多个内部查询,但 spark 不支持。克服它的最好方法是将您的超级查询分成几部分并使用连接它们。

例如运行这部分并将其保存为 table3:

select min(table2 .ID1)
           from table1 a left join table2 f on a.ID2 = f.ID2
           where a.ID2 = t.ID2
from table2

然后将其用于您的主要查询:

....
where f.ID1 = table3

推荐阅读