为什么SQL子查询中的外部引用会产生不同的结果?

时间:2019-07-24 11:11:37

标签: sql oracle oracle11g apache-spark-sql

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

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

查询1:

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上运行第一个查询?

请不要修改查询的结构。

1 个答案:

答案 0 :(得分:0)

Oracle支持多个内部查询,但spark不支持。克服它的最好方法是将您的超级查询分成多个部分,然后使用join。

例如,运行此部分并将其保存为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