Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como unir duas tabelas com base em valores de substring de campos?


Tantas maneiras de fazer isso. Seria uma boa ideia examinar o plano de explicação de várias maneiras antes de se comprometer com um método específico. Por exemplo, se houver um índice baseado em função em EMPLOYEE como SUBSTR(id, 2, LENGTH(id) - 1) então você vai querer usar isso em sua consulta:
SELECT e.name, i.name
  FROM employee e INNER JOIN instructor i
    ON SUBSTR(e.id, 2, LENGTH(e.id) - 1) = SUBSTR(i.id, 2, LENGTH(i.id) - 1);

Outra questão é se os valores no id coluna são sempre do mesmo tamanho em EMPLOYEE e INSTRUCTOR . E se forem de comprimentos diferentes? Talvez um tenha mais estofamento do que outro. Além disso, eles sempre serão dígitos além de um u principal ? Nesse caso, pode valer a pena tentar um TO_NUMBER() seguro conversão:
SELECT e.name, i.name
  FROM employee e INNER JOIN instructor i
    ON TO_NUMBER(REGEXP_SUBSTR(e.id, '\d+$')) = TO_NUMBER(REGEXP_SUBSTR(i.id, '\d+$'));

Uma outra coisa que você pode querer considerar, no entanto -- existe uma razão para o u principal no EMPLOYEE id coluna? Pode haver outros personagens principais? O u principal significa algo (violando a primeira forma normal, mas isso acontece)?