Tant de façons de le faire. Ce serait une bonne idée d'examiner le plan d'explication de différentes manières avant de s'engager dans une méthode particulière. Par exemple, s'il existe un index basé sur la fonction sur EMPLOYEE
comme SUBSTR(id, 2, LENGTH(id) - 1)
alors vous voudrez l'utiliser dans votre requête :
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);
Une autre question est de savoir si les valeurs dans le id
colonne ont toujours la même longueur dans EMPLOYEE
et INSTRUCTOR
. Et s'ils sont de longueurs différentes ? Peut-être que l'un a plus de rembourrage qu'un autre. De plus, seront-ils toujours des chiffres à l'exception d'un u
initial ? Si tel est le cas, il peut être intéressant d'essayer un TO_NUMBER()
sûr transformation :
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+$'));
Une autre chose que vous voudrez peut-être considérer, cependant - y a-t-il une raison pour le premier u
dans le EMPLOYEE
id
colonne? Peut-il y avoir d'autres personnages principaux ? Est-ce que le premier u
représenter quelque chose (en violation de la première forme normale, mais cela arrive) ?