Uso de autocombinaciones
Hasta ahora, en las combinaciones que se han usado participaban tablas diferentes. Es posible que haya escenarios en los que tenga que recuperar y comparar filas de una tabla con otras filas de la misma tabla. Por ejemplo, en una aplicación de recursos humanos, una tabla Employee podría incluir información sobre el jefe de cada empleado y almacenar el identificador del jefe en la propia fila del empleado. Cada jefe también aparece como empleado.
EmployeeID (Id. de empleado)
FirstName
ManagerID
1
Dan
NULL
2
Aisha
1
3
Rosie
1
4
Naomi
3
Para recuperar la información de los empleados y hacerla coincidir con el jefe relacionado, puede usar la tabla dos veces en la consulta, y combinarla con sí misma para los fines de la consulta.
SELECT emp.FirstName AS Employee,
mgr.FirstName AS Manager
FROM HR.Employee AS emp
LEFT OUTER JOIN HR.Employee AS mgr
ON emp.ManagerID = mgr.EmployeeID;
Los resultados de esta consulta incluyen una fila para cada empleado con el nombre de su jefe. El director general de la empresa no tiene ningún jefe. Para incluir al director general en los resultados, se usa una combinación externa y el nombre del jefe se devuelve como NULL para las filas en las que el campo ManagerID no tiene ningún campo EmployeeID coincidente.
Empleado
Manager
Dan
NULL
Aisha
Dan
Rosie
Dan
Naomi
Rosie
Hay otros escenarios en los que querrá comparar filas de una tabla con otras filas de la misma tabla. Como ha visto, es bastante fácil comparar columnas de la misma fila mediante T-SQL, pero el método para comparar valores de filas diferentes (como una fila que almacena una hora de inicio y otra de la misma tabla que almacena una hora de finalización correspondiente) es menos obvio. Las autocombinaciones son una técnica útil para estos tipos de consultas.
Para realizar tareas como esta, debe tener en cuenta las instrucciones siguientes:
- Defina dos instancias de la misma tabla en la cláusula FROM y combínelas según sea necesario, mediante combinaciones internas o externas.
- Use alias de tabla para diferenciar las dos instancias de la misma tabla.
- Use la cláusula ON para proporcionar un filtro que compare las columnas de una instancia de la tabla con las columnas de la otra instancia.