我运行两个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上运行第一个查询?
请不要修改查询的结构。
答案 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