是否可以对部分字符串进行左连接?

时间:2020-09-24 22:02:07

标签: sql string postgresql amazon-redshift inner-join

我试图连接两个表,但仅考虑表1中部分字符串。

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

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

还有table_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

如果所说的话就像 door car 。但是,由于 house / big ,我无法解决问题。

1 个答案:

答案 0 :(得分:2)

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

这可确保t2的“长”乘积以 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的主键。