Explicación de las autouniones

Resuelto Alex Gordon asked hace 14 años • 15 respuestas

No entiendo la necesidad de autouniones. ¿Alguien puede explicármelos?

Un ejemplo sencillo sería de gran ayuda.

Alex Gordon avatar Mar 17 '10 05:03 Alex Gordon
Aceptado

Puede ver la autounión como dos tablas idénticas. Pero en la normalización, no puede crear dos copias de la tabla, por lo que simplemente simula tener dos tablas con autounión.

Supongamos que tiene dos tablas:

Mesaemp1

Id Name Boss_id            
1   ABC   3                   
2   DEF   1                   
3   XYZ   2                   

Mesaemp2

Id Name Boss_id            
1   ABC   3                   
2   DEF   1                   
3   XYZ   2                   

Ahora, si deseas obtener el nombre de cada empleado con el nombre de su jefe:

select c1.Name , c2.Name As Boss
from emp1 c1
    inner join emp2 c2 on c1.Boss_id = c2.Id

Lo que generará la siguiente tabla:

Name  Boss
ABC   XYZ
DEF   ABC
XYZ   DEF
pointlesspolitics avatar Mar 16 '2010 22:03 pointlesspolitics

Es bastante común cuando tienes una tabla que hace referencia a sí misma. Ejemplo: una tabla de empleados donde cada empleado puede tener un gerente y desea enumerar todos los empleados y el nombre de su gerente.

SELECT e.name, m.name
FROM employees e LEFT OUTER JOIN employees m
ON e.manager = m.id
windyjonas avatar Mar 16 '2010 22:03 windyjonas

Una autounión es una unión de una tabla consigo misma.

Un caso de uso común es cuando la tabla almacena entidades (registros) que tienen una relación jerárquica entre ellos . Por ejemplo una tabla que contenga información de la persona (Nombre, Fecha de Nacimiento, Dirección...) y que incluya una columna donde se incluya el DNI del Padre (y/o de la madre). Luego con una pequeña consulta como

SELECT Child.ID, Child.Name, Child.PhoneNumber, Father.Name, Father.PhoneNumber
FROM myTableOfPersons As Child
LEFT OUTER JOIN  myTableOfPersons As Father ON Child.FatherId = Father.ID
WHERE Child.City = 'Chicago'  -- Or some other condition or none

podemos obtener información sobre el niño y el padre (y la madre, con una segunda unión, etc. e incluso los abuelos, etc.) en la misma consulta.

mjv avatar Mar 16 '2010 22:03 mjv

Digamos que tienes una mesa users, configurada así:

  • ID de usuario
  • nombre de usuario
  • ID del administrador del usuario

En esta situación, si desea extraer tanto la información del usuario como la información del administrador en una consulta, puede hacer esto:

SELECT users.user_id, users.user_name, managers.user_id AS manager_id, managers.user_name AS manager_name INNER JOIN users AS manager ON users.manager_id=manager.user_id
ceejayoz avatar Mar 16 '2010 22:03 ceejayoz