Замените имена переменных в одном столбце и объедините их с другой таблицей - PullRequest
0 голосов
/ 09 апреля 2019

Как заменить несколько имен в одном столбце и объединить с другой таблицей?

Мне нужно объединить 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 ]

1 голос
/ 09 апреля 2019

Возможно, что вы хотите, это более сложное 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() лучше:

SELECT A.*, IV.VALUE, IV.VAR
FROM TABLA_T  A LEFT JOIN
     TABLA_S IV
     ON  A.VAR1 = REPLACE(REPLACE(REPLACE(UPPER(IV.VAR), '_transform_', '_TRANS_'), '_difference_', '_DIF_'), '_upper_', '_UPP_');
0 голосов
/ 10 апреля 2019

если требование к oracle-plsql, то мы можем напрямую использовать функцию декодирования, где условие

DECODE(IV.VAR,
 '_transform_', '_TRANS_',
 '_difference_', '_DIF_',
 '_upper_', '_UPP_',
 IV.VAR) = A.VAR1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...