如何在配置单元中编写子查询,如:column=(从表中选择xx)?

dluptydi  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(426)

我有一个场景,例如:

with tmp as (select name from table1)
select * from table2 b 
where b.name=(select max(name) from tmp)

但是,hive无法识别此语法,因此是否有合法的语法?
经过搜索,我知道它可以使用 join 要实现:

select table2.* from table2
join (select max(name) as name from tmp) t2
where table2.name = t2.name

但我不想用join作为 join 会很慢,我只想作为参考。就像在 MySQL ,您可以将结果设置为参考:

set @max_date := select max(date) from some_table;
select * from some_other_table where date > @max_date;

而hive可以达到将查询结果存储在 shell . 检查:hiveql:将查询结果用作变量
配置单元能否在sql模式下支持这种功能?

cvxl0en2

cvxl0en21#

在hive中,您可以实现以下目标:

select * from table2 b 
where b.name=(select max(name) from table1)

另一种方法:您还可以在配置单元中创建临时表,这将有助于复制上面的oracle查询。

CREATE TEMPORARY TABLE tmp AS SELECT name FROM table1;
SELECT * FROM table2 b WHERE b.name=(SELECT max(name) FROM tmp);

相关问题