如何将多个名称替换为同一列并与其他表联接?
我必须联接2个表,但是第一个表中的问题是我的变量(VAR)与另一个(VAR1)相等,我必须替换不同的东西:
我必须转换所有大写字母,我必须更改:
'transform_'
应该匹配'_TRANS_'
'_difference_'
应该匹配'_DIF_'
'_upper_'
应该匹配'_UPP_'
示例:
表T
id var
-----------------------
1 col_difference_tr
2 pro_transform_rd
3 cap_upper_ld
表S
process var1
-------------------------
32 COL_DIF_TR
45 PRO_TRANS_RD
32 CAP_UPP_LD
然后要越过并与另一张桌子重合,我已经尝试过了:
SELECT A.* , IV.VALUE, VAR
FROM TABLA_T A
LEFT JOIN TABLA_S IV ON REPLACE(UPPER(IV.VAR),'_transform_', '_TRANS_')=
A.VAR1
LEFT JOIN TABLA_S IV ON REPLACE(UPPER(IV.VAR),'_difference_', '_DIF_')=
A.VAR1
LEFT JOIN TABLA_S IV ON REPLACE(UPPER(IV.VAR),'_upper_', '_UPP_')=
A.VAR1
所以决赛桌必须像这样:
id process var1
----------------------------
1 32 COL_DIF_TR
2 45 PRO_TRANS_RD
3 32 CAP_UPP_LD
答案 0 :(得分:1)
也许您想要的是更复杂的ns
条件?
JOIN
这可能无效。您可能还会发现单个SELECT A.*, IV.VALUE, IV.VAR
FROM TABLA_T A LEFT JOIN
TABLA_S IV
ON A.VAR1 IN (REPLACE(UPPER(IV.VAR), '_transform_', '_TRANS_'),
REPLACE(UPPER(IV.VAR), '_difference_', '_DIF_'),
REPLACE(UPPER(IV.VAR), '_upper_', '_UPP_')
);
是最好的:
replace()
答案 1 :(得分:0)
如果要求是在oracle-plsql上,那么我们可以在有条件的情况下直接使用解码功能
DECODE(IV.VAR,
'_transform_', '_TRANS_',
'_difference_', '_DIF_',
'_upper_', '_UPP_',
IV.VAR) = A.VAR1;