Ir al contenido principal

Self Join

Almacenar datos en una sola tabla relacional es llevada a cabo mediante la asignación de dos columnas por fila. Una columna almacena un identificador del registro padre y las segunda almacena el identificador del registro. Asociar las filas en una relación jerárquica requiere un Join a la misma tabla. Este tipo de Join es una técnica llamada Self Join.

Suponga que existe la necesidad de almacenar un árbol familiar en una tabla relacional. Hay varios enfoques que uno puede tomar. Una opción es usar una tabla llamada FAMILY con columnas llamadas ID, NAME, MOTHER_ID y FATHER_ID donde cada fila almacena una persona con un ID único y los ID para sus padres.

Cuando dos tablas son unidas, cada fila de la tabla Source es sometida a la condición Join con las filas de la tabla Target. Si la condición es evaluada a Verdadero, entonces las filas son unidas, donde las filas de ambas tablas son devueltas.

Cuando las columnas de un Join es originado de una sola tabla, un Self Join es requerido. Conceptualmente, la tabla Source es duplicada para crear la tabla Target. El Self Join trabaja como un Join Regular entre estas dos tablas. Tenga en cuenta que, internamente. Oracle no duplica la tabla, esta descripción es meramente provista para explicar el concepto de Self Join.

Ejemplo:

SELECT e1.employee_id, e1.first_name, e1.last_name, e1.job_id, e1.manager_id, e2.employee_id manager_id, e2.first_name manager_firsname, e2.last_name manager_lastname,

       e2.job_id manager_jobid, e2.manager_id manager_managerid

FROM   employees e1

       JOIN employees e2 ON (e1.manager_id = e2.employee_id)

ORDER BY employee_id;

Comentarios