Oracle
 sql >> Database >  >> RDS >> Oracle

Come unire due tabelle in base ai valori di sottostringa dei campi?

Tanti modi per farlo. Sarebbe una buona idea esaminare il piano di spiegazione per vari modi prima di impegnarsi in un metodo particolare. Ad esempio, se è presente un indice basato su funzione su EMPLOYEE come SUBSTR(id, 2, LENGTH(id) - 1) quindi vorrai usarlo nella tua query:

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

Un'altra domanda è se i valori in id le colonne sono sempre della stessa lunghezza in EMPLOYEE e INSTRUCTOR . E se sono di lunghezza diversa? Forse uno ha più imbottitura di un altro. Inoltre, saranno sempre cifre a parte un u iniziale ? In tal caso, potrebbe essere utile provare un TO_NUMBER() sicuro conversione:

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+$'));

Un'altra cosa che potresti prendere in considerazione, tuttavia:c'è un motivo per il principale u nel EMPLOYEE id colonna? Possono esserci altri protagonisti? Il principale u rappresentare qualcosa (violando la prima forma normale, ma succede)?