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
Instrucciones del ejercicio
- Guarda un alias de la tabla
employeescomomanagers. Para ello, aplica el método.alias()aemployees. - Construye una consulta para seleccionar el
namedel empleado y elnamede su manager. Elnamedel manager ya se ha seleccionado por ti. Usalabelpara etiquetar la columnanamedeemployeescomo'employee'. - Añade una cláusula where a
stmtpara hacer coincidir cuando la columnaidde la tablamanagerscorresponda con la columnamgrde la tablaemployees. - Ordena la sentencia por la columna
namede la tablamanagers. - 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)