sql - 为什么 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 上运行第一个查询?
请不要修改查询的结构。
解决方案
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
推荐阅读
- c++ - 当没有排序要求时,C/C++ 中的 volatile 整数是否足以应对读写冲突?
- sorting - Flutter:如何按降序或字母顺序对 ListView(来自 Json 的数据)进行排序?
- amazon-web-services - 关于 AWS DynamoDB 'Keys' 的一些基本疑问
- java - 无法使用 @Controller 获得响应,而 @RestController 工作正常
- java - 需要在列表中添加多个项目 - 决策表 - Drools
- sql-server - SQL Server中视图和标量函数的循环引用
- laravel - 如何在laravel中获取两个日期之间的日期数组?
- python - 我该怎么做才能拥有没有符号的数字?
- javascript - 无法将联系表中的数据存储到 Firebase
- c++ - 如何使用 g++/C++ 保存链接?