首页 > 解决方案 > 是否可以对部分字符串进行左连接?

问题描述

我正在尝试加入两个表,但只考虑表 1 中的部分字符串。

我有 table_1,它看起来像这样:

product              date_creation
door                 2020-01-02
car                  2020-02-10
house/big            2020-03-15

和表_2:

product              amount
door/brown           10
door                 100
car/toyota           5
car/toyota/black     15
house/big/beach      3
house/big/beach/old  2 

我想得到这个结果:

product              date_creation      amount
door                 2020-01-02         110
car                  2020-02-10         20
house/big            2020-03-15         5

所以我想考虑所有可能的子字符串来加入表格。

我知道我可以做类似的事情:

select t1.*, sum(t2.amount)
from table_1 t1
left join table_2 t2
on t1.product = split_part(t2.product, '/', 1)
group by 1,2

如果一切都像。但是,由于house/big,我陷入了没有解决方案的困境。

标签: sqlstringpostgresqlamazon-redshiftinner-join

解决方案


like应该这样做:

select t1.*, sum(t2.amount)
from table_1 t1
left join table_2 t2 on t2.product like t1.product || '/%'
group by t.product

这确保了“长”产品 fromt2 “短”产品 from开头t1,后跟一个斜线。

如果完美匹配是可能的,那么以下方法更安全:

select t1.*, sum(t2.amount)
from table_1 t1
left join table_2 t2 on t2.product || '/' like t1.product || '/%'
group by t.product

group by我对这个子句不太满意(位置表​​达和select *不太配合)。我将其更改为t.product,我认为它是 的主键t1


推荐阅读