根据部分字符串匹配连接两个表

时间:2018-07-02 15:05:55

标签: sql hive hiveql

我有两个表,其中一些表的计数保存在haddop配置单元上。 表1列:日期,表,计数(表名小写)

01/07/2018 base1.tablename1 300
01/07/2018 base1.tablename2 100 ...

我的第二张表具有相同的形状:日期,表,计数(其中表名为大写字母

02/07/2018 TABLENAME1 200
02/07/2018 TABLENAME2 10

我想要一个新桌子

Tablename_T1 tablename_T2 CountT1 CountT2 DateT1 DateT2 TABLENAME1 tablename1 300 200 01/07/18 02/07/2018 TABLENAME2 tablename2 100 0 01/07/18 02/07/2018

我尝试了此查询,但它不起作用

select * from count_tables a, count_tables2 b where a.tablenamelike concat('%',b.tablename,'%')

谢谢

2 个答案:

答案 0 :(得分:1)

使用instr()函数

select *
  from count_tables  a
       inner join count_tables2 b on a.datet1=b.datet2
 where instr(a.tablename,b.tablename) > 0

如果不希望将表on a.datet1=b.datet2中的每个日期与表a中的每个日期重复,则将日期添加到连接条件b中。

还可以使用locate(string substr, string str[, int pos])函数:

where locate(b.tablename, a.tablename) > 0

答案 1 :(得分:0)

如果a.nom_table具有可预测的顺序,那么我们可以这样写

select *
from count_tables a, count_tables2 b
where substr(a.nom_table,7,length(a.nom_table))=lower(b.nom_table)