[英]Hive Query doesnt allow >= in subquery in the where clause
我有一个生成日期的表(umt_date),我需要在第二个查询中使用这个日期来获取大于等于 umt_date 表中日期的所有数据
umt_date
----------------------------
|processdate||processname|
----------------------------
| 2020-06-01 | A |
----------------------------
| 2020-06-01 | B |
当我执行 sql
select * from main_table
where processdate >= (select processdate from umt_date where processname='A')
我收到以下错误
SQL 错误 [40000] [42000]:编译语句时出错:FAILED:SemanticException Line 0:-1 Unsupported SubQuery Expression 'processdate':只允许作为顶级连词的 SubQuery 表达式
由于我们没有任何公共列,因此我们也无法执行连接。 有什么替代方案?
如果子查询返回单行,使用交叉连接:
select m.*
from main_table m
cross join (select processdate from umt_date where processname='A') t
where m.processdate >= t.processdate
如果子查询返回多于一行,请在某些条件下使用 join。 在这种情况下,交叉连接不好,因为它会重复数据,尽管 WHERE 可能会过滤重复的行
您可以尝试使用WITH
子句,如下所示
WITH PROCESSA_SUBQ AS(
select processdate from umt_date where processname='A'
)
SELECT a.* FROM main_table as a
INNER JOIN
PROCESSA_SUBQ as b
ON 1=1 -- always true join condition, can be ignored.
where a.processdate >= b.processdate
或者您也可以获得 boolean 条件检查:
WITH PROCESSA_SUBQ AS(
select processdate from umt_date where processname='A'
)
SELECT X.* FROM (
SELECT a.*, (a.processdate>=b.processdate) as check FROM main_table as a
INNER JOIN
PROCESSA_SUBQ as b
ON 1=1 -- always true join condition, can be ignored.
) as X where X.check = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.