So viele Möglichkeiten, dies zu tun. Es wäre eine gute Idee, sich den Erklärungsplan für verschiedene Möglichkeiten anzusehen, bevor Sie sich auf eine bestimmte Methode festlegen. Zum Beispiel, wenn es einen funktionsbasierten Index zu EMPLOYEE
gibt wie SUBSTR(id, 2, LENGTH(id) - 1)
dann sollten Sie das in Ihrer Abfrage verwenden:
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);
Eine andere Frage ist, ob die Werte in der id
Spalte sind in EMPLOYEE
immer gleich lang und INSTRUCTOR
. Was ist, wenn sie unterschiedlich lang sind? Vielleicht hat einer mehr Polsterung als der andere. Außerdem werden sie immer Ziffern sein abgesehen von einem vorangestellten u
? Wenn ja, dann könnte es sich lohnen, ein sicheres TO_NUMBER()
zu versuchen Konvertierung:
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+$'));
Eine andere Sache, die Sie vielleicht in Betracht ziehen sollten – gibt es einen Grund für das vorangestellte u
im EMPLOYEE
id
Säule? Kann es andere Hauptfiguren geben? Macht das führende u
für etwas stehen (Verletzung der ersten Normalform, aber das passiert)?