Usare alias per gestire query con join sulla stessa tabella
Spesso ti capiterà di avere tabelle con dati gerarchici, per esempio dipendenti
e manager che sono anch’essi dipendenti. Per questo motivo, potresti voler fare un join di una tabella con sé stessa su colonne diverse. Il metodo .alias(), che crea una copia della tabella, aiuta a svolgere
questo compito. Trattandosi della stessa tabella, ti serve solo una clausola where per specificare
la condizione di join.
Qui userai il metodo .alias() per costruire una query che metta in join la
tabella employees con sé stessa per determinare a chi riporta ciascuno.
Questo esercizio fa parte del corso
Introduzione ai database in Python
Istruzioni dell'esercizio
- Salva un alias della tabella
employeescomemanagers. Per farlo, applica il metodo.alias()aemployees. - Costruisci una query per selezionare il
namedel dipendente e ilnamedel suo manager. Ilnamedel manager è già stato selezionato per te. Usalabelper etichettare la colonnanamediemployeescome'employee'. - Aggiungi a
stmtuna clausola where per far corrispondere la colonnaiddella tabellamanagerscon la colonnamgrdella tabellaemployees. - Ordina l’istruzione per la colonna
namedella tabellamanagers. - Esegui l’istruzione e memorizza tutti i risultati. Questo codice è già scritto. Invia la risposta per stampare i nomi dei manager e di tutti i loro dipendenti.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)