我需要在查询中连接两个表 door_ctrlr_fact
和 equip_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/