Uso de autocombinaciones

Completado

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.