2010-07-29 15 views

Respuesta

125

Utiliza una autocombinación cuando una tabla hace referencia a datos en sí misma.

P. ej., Una tabla Employee puede tener una columna SupervisorID que apunta al empleado que es el jefe del empleado actual.

para consultar los datos y obtener información tanto para las personas en una fila, usted podría unirse a sí mismo de esta manera:

select e1.EmployeeID, 
    e1.FirstName, 
    e1.LastName, 
    e1.SupervisorID, 
    e2.FirstName as SupervisorFirstName, 
    e2.LastName as SupervisorLastName 
from Employee e1 
left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID 
+0

que parece un auto exterior se unen a mí? –

+2

@JoeCaruso Eso es porque lo es;) – RedFilter

+2

Me pregunto por qué nadie enfatiza la parte "en la misma fila". ¿No es ese el punto de hacer una auto unión? –

14

Un auto se unen es simplemente cuando se une a una mesa con ella misma. No existe la palabra clave SELF JOIN, solo escribe una unión ordinaria en la que ambas tablas involucradas en la combinación son la misma tabla. Una cosa a tener en cuenta es que cuando se autoensambla es necesario usar un alias para la tabla; de lo contrario, el nombre de la tabla sería ambiguo.

Es útil cuando quiere correlacionar pares de filas de la misma tabla, por ejemplo, una relación padre-hijo. La siguiente consulta devuelve los nombres de todas las subcategorías inmediatas de la categoría 'Cocina'.

SELECT T2.name 
FROM category T1 
JOIN category T2 
ON T2.parent = T1.id 
WHERE T1.name = 'Kitchen' 
+0

Encantador de ver este comentario .. ON T2.parent = T1.id (porque afecta el resultado si intercambiamos 'padre' e 'id' en él) – himanshupareek66

+0

Es bueno mencionar que no existe la palabra clave 'SELF JOIN'. ¡Estaba confundido acerca de esa parte! – nclsvh

6

Utilizará una autocombinación en una tabla que "se refiera" a sí misma, p. Ej. una tabla de empleados donde managerid es una clave externa para employeeid en esa misma tabla.

Ejemplo:

SELECT E.name, ME.name AS manager 
FROM dbo.Employees E 
LEFT JOIN dbo.Employees ME 
ON ME.employeeid = E.managerid 
+0

EN ME.employeeid = E.managerid creará un resultado diferente en lugar de ON ME.managerid = E.employeeid – himanshupareek66

12

SQL autocombinación simplemente es unirse a una normal, que se utiliza para unirse a una mesa a sí mismo.

Ejemplo:

Select * 
FROM Table t1, Table t2 
WHERE t1.Id = t2.ID 
+16

¿No sería más seguro usar 'SELECT t1. *' Para evitar duplicar los nombres de las columnas en el resultado? – Matthieu

41

Bueno, un ejemplo clásico es donde quería obtener una lista de los empleados y sus gerentes inmediatos:

select e.employee as employee, b.employee as boss 
from emptable e, emptable b 
where e.manager_id = b.empolyee_id 
order by 1 

Se utiliza básicamente en que existe alguna relación entre las hileras almacenado en la misma mesa

  • empleados.
  • marketing multinivel.
  • piezas de la máquina.

Y así sucesivamente ...

+7

Boo para sintaxis no ANSI y utilizando ordinal en la cláusula 'ORDER BY' en lugar de un nombre de columna. – RedFilter

+14

Boo de vuelta a usted por haber perdido el sentido de la respuesta :-) Tiendo a utilizar la sintaxis más simple que funciona ya que el buen DBMS 'no permitirá que eso afecte el rendimiento. – paxdiablo

+0

mejor respuesta hasta ahora ... :) –

Cuestiones relacionadas