Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我想提取表a中的一些列,这些列在表B中没有条目。如何在配置单元中实现这一点?_Sql_Hive_Bigdata_Hiveql - Fatal编程技术网

Sql 我想提取表a中的一些列,这些列在表B中没有条目。如何在配置单元中实现这一点?

Sql 我想提取表a中的一些列,这些列在表B中没有条目。如何在配置单元中实现这一点?,sql,hive,bigdata,hiveql,Sql,Hive,Bigdata,Hiveql,我想提取表(a)中的一些列,这些列在表(B)中没有条目。我怎样才能在蜂巢中做到这一点?我正在处理一个查询(如下),但目前不起作用,请帮助 连接列:prd\U raw\U sf.sf\U opportunity\U dn中的产品名称到prd\U raw\U sf.sf\U product\U映射中的SFDC\U product\U名称 select * FROM prd_raw_sf.sf_opportunity_dn JOIN prd_raw_sf.sf_si_accounts_mappin

我想提取表(a)中的一些列,这些列在表(B)中没有条目。我怎样才能在蜂巢中做到这一点?我正在处理一个查询(如下),但目前不起作用,请帮助

连接列:prd\U raw\U sf.sf\U opportunity\U dn中的产品名称到prd\U raw\U sf.sf\U product\U映射中的SFDC\U product\U名称

select *
FROM prd_raw_sf.sf_opportunity_dn  
JOIN prd_raw_sf.sf_si_accounts_mapping ON prd_raw_sf.sf_opportunity_dn.account_name = prd_raw_sf.sf_si_accounts_mapping.sfdc_account_name
WHERE prd_raw_sf.sf_opportunity_dn.account_name not in (select * from prd_raw_sf.sf_si_accounts_mapping);

我建议使用
不存在
加入
似乎没有必要:

select o.*
from prd_raw_sf.sf_opportunity_dn o 
where not exists (select 1
                  from prd_raw_sf.sf_si_accounts_mapping a
                  where o.account_name = a.account_name
                 );

这里会想到
左连接
反模式:

select o.*
from prd_raw_sf.sf_opportunity_dn o
left prd_raw_sf.join sf_si_accounts_mapping m on o.account_name = m.sfdc_account_name
where m.sfdc_account_name is null
查询尝试使用
sf\u si\u accounts\u映射
连接
sf\u opportunity\u dn
中的每个记录,然后
where
子句仅过滤无法连接的记录

使用以下索引,这应该是一个有效的解决方案:

prd_raw_sf.sf_opportunity_dn(account_name )
prd_raw_sf.join sf_si_accounts_mapping(sfdc_account_name)

注意:表别名使查询更短,更容易理解。我将它们添加到您的查询中,我建议您始终使用它们。

您可以使用
左连接
左半连接

左连接方法:

select a.*
FROM prd_raw_sf.sf_opportunity_dn  as a
LEFT JOIN prd_raw_sf.sf_si_accounts_mapping as b 
      ON a.account_name = b.sfdc_account_name
WHERE b.sfdc_account_name is Null;
左半连接:

select a.*
    FROM prd_raw_sf.sf_opportunity_dn  as a
    LEFT SEMI JOIN prd_raw_sf.sf_si_accounts_mapping as b 
          ON a.account_name = b.sfdc_account_name
性能方面的左半联接比左联接更好,因为它只在第二个表中找到第一个匹配记录时进行检查,并跳过特定键的剩余匹配