我有一个hiveql查询,如下所示:
create table JOINED as select TABLEA.* from TABLEA join TABLEB on
TABLEA.key=TABLEB.key where nvl(TABLEA.attr, 0)=nvl(TABLEB.attr, 0);
但是这个查询不会选择那些 TABLEA.key=TABLEB.key
和 TABLEA.attr=NULL
以及 TABLEB.attr=NULL
. (或) TABLEA.attr=0
以及 TABLEB.attr=NULL
. (或) TABLEA.attr=NULL
以及 TABLEB.attr=0
.
以上病例均未入选。为什么会这样?我是否误解了nvl()的用法?
如果attr属性为null,我希望它默认为0。什么是正确的查询?
1条答案
按热度按时间8oomwypt1#
谢谢,我刚刚报告了一个错误-
包含nvl/coalesce的内部join on子句/where的结果不正确
如果你检查一下执行计划,你会发现两个表的 predicate 都错了
attr is not null
.从两个表中选择列(例如。
select TABLEA.*,TABLEB.key
)似乎阻止了这个问题。