Så mange måder at gøre dette på. Det ville være en god idé at se på forklaringsplanen for forskellige måder, før du forpligter dig til en bestemt metode. For eksempel, hvis der er et funktionsbaseret indeks på EMPLOYEE
såsom SUBSTR(id, 2, LENGTH(id) - 1)
så vil du gerne bruge det i din forespørgsel:
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);
Et andet spørgsmål er, om værdierne i id
kolonne har altid samme længde i EMPLOYEE
og INSTRUCTOR
. Hvad hvis de er af forskellig længde? Måske har den ene mere polstring end den anden. De vil også altid være cifre bortset fra en førende u
? Hvis det er tilfældet, kan det være umagen værd at prøve en sikker TO_NUMBER()
konvertering:
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+$'));
En anden ting du måske vil overveje -- er der en grund til den førende u
i EMPLOYEE
id
kolonne? Kan der være andre hovedpersoner? Gør den førende u
stå for noget (overtræder første normalform, men det sker)?