在Spark中使用WHERE子句的嵌套SELECT

时间:2019-02-21 15:36:07

标签: sql apache-spark

我在运行Spark SQL查询时遇到问题,该查询使用带有“ where in”子句的嵌套选择。在 table1 下面的查询中,它代表一个临时表,该表来自更复杂的查询。最后,我想用该查询替换 table1

select * from (select * from table1) as table2 
where (product, price) 
in (select product, min(price) from table2 group by product)

我收到的Spark错误说:

  

AnalysisException:'未找到表或视图:table2;

如何更改查询以使其按预期工作?

1 个答案:

答案 0 :(得分:0)

subquery(即(select * from table1) as table2)是不必要的,它仅限于subquery定义后不能与inwhere一起使用的立即使用子句,您可以改为使用correlated子查询:

select t1.*
from table1 t1 
where t1.price = (select min(t2.price) from table1 t2 where t2.product = t1.product);