繁体   English   中英

如果联接的值在特定集中,则在JOIN查询中使用LIKE

[英]Using LIKE in JOIN query if values for join are in specfic set

我有两套:

  1. 名称字典
  2. 从电子邮件中提取的“名称”

我想找出集合2中的“名称”是否类似/包含集合1中的任何名称,例如:

  • johnsmith包含john,所以可以。

如何在HIVE SQL中执行此操作?

select a.*, b.name as name_from_email
from set2 a left join 
     set1 b 
     on a.email_name rlike concat('%',b.name,'%')

我收到错误消息:“ JOIN''%''中同时遇到左右别名:28:27,org.apache.hive.service.cli.operation.Operation:toSQLException:Operation.java:323,“

您可以像下面这样使用instr:

on(1=1) where instr(a.email_name, b.name) != 0

我知道这很痛苦,但这可以解决问题

干杯!!

您可以痛苦地做到这一点来获得匹配:

select a.*, b.name as name_from_email
from set2 a cross join 
     set1 b 
where a.email_name rlike concat('%', b.name, '%');

获取其他不匹配的行是很痛苦的。 我认为这应该工作:

select a.*, b.name as name_from_email
from set2 a cross join 
     set1 b 
where a.email_name rlike concat('%', b.name, '%');
union all
select a.*, null
from set2 a
where not exists (select 1
                  from set1 b
                  where a.email_name rlike concat('%', b.name, '%')
                 );

注意:您可能会发现该程序可以编译,但实际上无法运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM