sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo unir dos tablas en función de los valores de subcadena de los campos?

Tantas maneras de hacer esto. Sería una buena idea mirar el plan de explicación de varias maneras antes de comprometerse con un método en particular. Por ejemplo, si hay un índice basado en funciones en EMPLOYEE como SUBSTR(id, 2, LENGTH(id) - 1) entonces querrás usar eso en tu consulta:

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

Otra pregunta es si los valores en el id columna siempre tienen la misma longitud en EMPLOYEE y INSTRUCTOR . ¿Qué pasa si son de diferentes longitudes? Tal vez uno tenga más relleno que otro. Además, ¿siempre serán dígitos? además de una u inicial ? Si es así, entonces podría valer la pena intentar un TO_NUMBER() seguro conversión:

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

Sin embargo, es posible que desee considerar otra cosa:¿hay alguna razón para que la u principal en el EMPLOYEE id ¿columna? ¿Puede haber otros personajes principales? ¿La u inicial representar algo (violando la primera forma normal, pero eso sucede)?