将变量名称替换为同一列,然后与其他表连接

时间:2019-04-09 15:04:55

标签: sql oracle join

如何将多个名称替换为同一列并与其他表联接?

我必须联接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

2 个答案:

答案 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;