Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verbinde ich zwei Tabellen basierend auf Teilzeichenfolgenwerten von Feldern?

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)?