HiveQL -在现有检查中使用范围筛选会导致相关子查询出错

mwngjboj  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(138)

所以我想实现类似于“检查两个时间戳之间是否有任何条目”这样的代码,我能得到的就是这样的代码:

CASE WHEN EXISTS(SELECT * FROM sometable WHERE sometable.timestamp between othertable.time1 and othertable.time2) THEN 1 ELSE 0 END

然后Hive对我尖叫:

We can't transform correlated subquery having where correlated condition other than AND or in a non-equal expression.

从错误消息的字面含义判断,我认为在使用其他表中的列(从而形成相关子查询)时,可能无法将任何WHERE条件与<>BETWEEN...AND...以及EXISTS()中的SELECT子句一起放置。
那么我该怎么做才能实现我想要的东西呢?

1dkrff03

1dkrff031#

您是对的。您可以像oracle一样在select中编写子查询。您可以将子查询左连接到主表并获得输出。因此,它可能如下所示

SELECT 
CASE WHEN sometable.timestamo is not null THEN 1 ELSE 0 END
FROM othertable 
left join sometable ON sometable.timestamp between othertable.time1 and othertable.time2

相关问题