错误:当前子查询表达式仅允许作为配置单元中的 where 子句谓词

Posted

技术标签:

【中文标题】错误:当前子查询表达式仅允许作为配置单元中的 where 子句谓词【英文标题】:error : currently subquery expressions are only allowed as where clause predicates in hive 【发布时间】:2021-07-25 20:16:04 【问题描述】:

我编写了如下的配置单元查询语言。它给了我标题中写的错误。 查询是:

SELECT clnt_nbr,
       CASE
           WHEN clnt_nbr in
                  (SELECT clnt_NBR
                   FROM crd_master
                   WHERE crd_typ = '198 or crd_typ = '199' ) THEN 1
           ELSE 0
       END) AS f_ultima
FROM INT_CLNT_master
ORDER BY clnt_nbr;

我在这个配置单元查询中遇到错误

“目前子查询表达式只允许在hive中作为where子句谓词”。

请帮忙!!

【问题讨论】:

请检查括号/方括号好吗?好像你错过了一个。另请检查单引号 【参考方案1】:

请使用 ansi join 语法重写 hive ql,如下所示。如果您看到重复,请使用您的 subqry 并使用 distinct。

select icm.clnt_nbr, 
case when cm.clnt_nbr is not null then 1 else 0 end as f_ultima 
from INT_CLNT_master icm 
Left outer join crd_master cm on icm.clnt_nbr=cm.clnt_NBR and ( crd_typ = '198 or crd_typ = '199' )
order by clnt_nbr;

【讨论】:

以上是关于错误:当前子查询表达式仅允许作为配置单元中的 where 子句谓词的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中的错误 - 当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的

如何在配置单元中使用正则表达式排除字符串中的特殊字符

子查询中的子查询在配置单元中不起作用

SQL之子查询

子查询返回多个值错误

语句错误时的MSSQL案例