¿Qué es SELF JOIN y cuándo lo usarías? [duplicar]


Posible Duplicado:
sql: auto-joins explained

¿Qué es self join y cuándo lo usarías? No entiendo auto se une así a un laico explicación con un ejemplo sería genial.

Author: DaveInCaz, 2010-07-29

5 answers

Se utiliza una unión automática cuando una tabla hace referencia a datos en sí misma.

Por ejemplo, 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 para ambas personas en una fila, puede unirse de la siguiente 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
 141
Author: RedFilter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 18:59:19

Bueno, un ejemplo clásico es donde querías obtener una lista de 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 usa básicamente cuando hay alguna relación entre filas almacenadas en la misma tabla.

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

Y así sucesivamente...

 46
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 11:39:35

Un auto join es simplemente cuando se une a una tabla consigo mismo. No hay una palabra clave SELF JOIN, simplemente escribe una combinación ordinaria donde ambas tablas involucradas en la combinación son la misma tabla. Una cosa a tener en cuenta es que cuando se está auto uniendo es necesario utilizar un alias para la tabla de lo contrario el nombre de la tabla sería ambiguo.

Es útil cuando desea 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'
 16
Author: Mark Byers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 11:48:45

SQL self-join simplemente es una combinación normal que se utiliza para unir una tabla a sí misma.

Ejemplo:

Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
 12
Author: Michael Pakhantsov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 11:38:56

Usarías un auto-join en una tabla que "se refiere" a sí misma, por ejemplo, una tabla de empleados donde managerid es una clave foránea 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
 6
Author: Will A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 11:38:31