ComenzarEmpieza gratis

Usar alias para gestionar consultas con auto-join de la misma tabla

A menudo tendrás tablas con datos jerárquicos, como empleados y managers que también son empleados. Por ello, puede interesarte unir una tabla consigo misma en columnas diferentes. El método .alias(), que crea una copia de una tabla, ayuda a realizar esta tarea. Como es la misma tabla, solo necesitas una cláusula where para indicar la condición de la unión.

Aquí usarás el método .alias() para construir una consulta que una la tabla employees consigo misma y averiguar a quién reporta cada persona.

Este ejercicio forma parte del curso

Introducción a las bases de datos en Python

Ver curso

Instrucciones del ejercicio

  • Guarda un alias de la tabla employees como managers. Para ello, aplica el método .alias() a employees.
  • Construye una consulta para seleccionar el name del empleado y el name de su manager. El name del manager ya se ha seleccionado por ti. Usa label para etiquetar la columna name de employees como 'employee'.
  • Añade una cláusula where a stmt para hacer coincidir cuando la columna id de la tabla managers corresponda con la columna mgr de la tabla employees.
  • Ordena la sentencia por la columna name de la tabla managers.
  • Ejecuta la sentencia y guarda todos los resultados. Este código ya está escrito. Enviar la respuesta para imprimir los nombres de los managers y de todos sus empleados.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# Make an alias of the employees table: managers
managers = ____

# Build a query to select names of managers and their employees: stmt
stmt = select(
    [managers.columns.name.label('manager'),
     ____]
)

# Match managers id with employees mgr: stmt_matched
stmt_matched = stmt.where(managers.columns.id == ____)

# Order the statement by the managers name: stmt_ordered
stmt_ordered = stmt_matched.order_by(____)

# Execute statement: results
results = connection.execute(stmt_ordered).fetchall()

# Print records
for record in results:
    print(record)

Editar y ejecutar código