a woman taking photo of herself in the mirror using a dslr camera

Pregunta de examen técnico (y muy común): tenés una tabla de empleados, cada uno con su columna “ID”. Hay otra columna más, que indica el ID del jefe de ese empleado. Querés saber el nombre del jefe de cada empleado.

¿Lo sacaste?

¿No?

Pensalo un ratito, cómo lo harías manualmente. Tenés eso en una hoja. Ves que el empleado 10, “Pedro”, tiene como jefe a 8, “Manuel”, entonces lo que hacés es buscar al 8 en la misma tabla. Un SELF JOIN, o mejor dicho, consultar una tabla uniéndola consigo misma.

Vamos a pasarlo a SQL. Tenemos esta tabla, llamada Test.Employee:

Se ve a las claras que Pepe no tiene jefe, Martín tiene como jefe a Pepe y Pedro a Martín. ¿Cómo mostramos ese nombre?

Una forma es la siguiente:

SELECT A.ID, A.Name, B.Name As ManagerName FROM Test.Employee A
LEFT JOIN Test.Employee B ON A.ManagerID = B.ID

Y el resultado será este:

Es importante ver que tanto en el FROM como en el LEFT JOIN hacemos referencia a la misma tabla, pero usamos dos alias distintos: “A” para los empleados y “B” para los jefes. La igualación de la clave comparativa funciona para considerar a los jefes como empleados (que lo son).

Si uso un INNER JOIN en su lugar, Pepe no aparecerá en los resultados, ya que no tiene jefe.

¡Suscribite al newsletter!

Avatar photo

Martín Longo

Director de Ánimadata y Business Intelligence Engineer. Quemadísimo, escribo acá mis opiniones.