sql - 是否可以对部分字符串进行左连接?
问题描述
我正在尝试加入两个表,但只考虑表 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,我陷入了没有解决方案的困境。
解决方案
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
。
推荐阅读
- .net - 用于 PKCS7 的 Oracle dbms_crypto
- reactjs - 如何在componentDidMount中调用twofunction?
- c# - OpenTK GlControl,深度剥离,黑色视口
- c++ - 朋友和成员二元运算符的消歧
- ssl - 通过 SSL 将密码 ldapmodify 更改为 AD 2008 R2 失败并显示 0000052D:SvcErr:DSID-031A1248,问题 5003 (WILL_NOT_PERFORM)
- arrays - C中的指针数组
- appcelerator - bash:appc:在 appcelerator 工作室中找不到命令
- reactjs - 使用 React 在 Kendo Ui Grid 中过滤异常
- filter - Play Framework 2.5.12 - 在 application.conf 中设置多个过滤器
- javascript - 使用引导程序(js、html)动态服务移动和桌面网站