为什么此Hive代码返回0个结果?

时间:2019-11-07 13:29:55

标签: sql hive bigdata hiveql

select * 
FROM prd_raw_sf.sf_opportunity_dn A JOIN 
     prd_raw_sf.sf_opportunity_rw B
     ON A.OPPORTUNITYID  = B.SFDC_ID LEFT JOIN
     prd_raw_sf.sf_si_accounts_mapping C
     ON TRIM(UPPER(A.ACCOUNT_NAME)) = TRIM(UPPER(C.sfdc_account_name))
WHERE C.sfdc_account_name IS NULL
and C.Billing_Client in ('CL.00000:')

当我查询到“ WHERE C.sfdc_account_name IS NULL”时,它将返回必要的结果。但是,如果我添加最后一行...“和('CL.00000:')中的C.Billing_Client”,它只会返回0结果。请帮忙!

1 个答案:

答案 0 :(得分:0)

我推测您打算这样做:

SELECT * 
FROM prd_raw_sf.sf_opportunity_dn od JOIN 
     prd_raw_sf.sf_opportunity_rw orw
     ON od.OPPORTUNITYID = orw.SFDC_ID LEFT JOIN
     prd_raw_sf.sf_si_accounts_mapping am
     ON TRIM(UPPER(od.ACCOUNT_NAME)) = TRIM(UPPER(ord.sfdc_account_name)) AND
        am.Billing_Client in ('CL.00000:')
WHERE am.sfdc_account_name IS NULL;

帐户名不能为NULL之后的LEFT JOIN,并且Billing_Client不能是NULL以外的其他名称。这是因为帐户名用作JOIN键,所以NULL不匹配。 NULL的值表示不匹配,因此表中的所有其他列均为NULL

请注意,我还修复了表别名,以使它们有意义而不是任意字母。