sql - 如何根据条件加入不同的字段

标签 sql postgresql join

我需要在查询中连接两个表 door_ctrlr_factequip_store_dim

select * from door_ctrlr_fact d
join equip_store_dim e
on d.door_id = e.tech_nbr

有一小部分数据带有特殊的door_id,例如WM1-1003-072。此字符串中的第三个字段有前导零,需要在加入之前将其删除。所以对这个数据子集的查询是:

select * from door_ctrlr_fact d
join equip_store_dim e
on split_part(d.door_id, '-', 1) = split_part(e.tech_nbr, '-', 1)
and split_part(d.door_id, '-', 2) = split_part(e.tech_nbr, '-', 2)
and trim(leading '0' from split_part(e.door_id, '-', 3)) = trim(leading '0' from split_part(e.tech_nbr, '-', 3))
where door_id like 'WM%'

为了处理所有情况,我可以根据 door_id 的样子联合两个查询。

例如,在表 door_ctrlr_fact 中:

door_id       cycle_cnt
A10003        500
WM4-103-070   1000
B200384       2000

在表 equip_store_dim

tech_nbr       store_id
A10003         S001
WM4-103-70    S002
B200384        S004

加入后,结果应该是:

door_id      cycle_cnt       store_id
A10004        500             S001
WM4-103-70    1000            S002
B200384       2000            S004

我想知道是否有更好的方法来做到这一点。我可以只使用一个查询并根据 door_id

的不同格式加入不同的字段吗

最佳答案

我使用 REGEXP_REPLACE 函数修改连接中的 door_id,我在正则表达式中使用组来仅匹配第二个连字符后的“-0”组合

SELECT door_id, cycle_cnt, store_id
FROM door_ctrlr_fact
JOIN equip_store_dim ON tech_nbr = REGEXP_REPLACE(door_id, '(.*-.*)(-0)(.*)', '\1-\3') 

关于sql - 如何根据条件加入不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157813/

相关文章:

mongodb - 如何在 $lookup Mongodb 的 LocalField 中将字符串转换为 objectId

php - 计算mysql中的重复行

php - 根据 id 和 parent_id 属性对集合(或对象数组)进行排序

mysql - 存储过程不运行

Postgresql 选择缺少时区偏移量的输出日期

mysql - 为数据库服务器配置 Quartz

mysql inner join关联所有元组

sql - SQL选择和交换ID列,以便参数出现在左列中

arrays - Bash,条件数组,postgres select

linux - 将三个数据文件连接成具有不同且相同时间步长的矩阵