Alias verwenden, um Joins auf derselben Tabelle zu handhaben
Häufig gibt es Tabellen mit hierarchischen Daten, zum Beispiel Mitarbeitende und Manager:innen, die ebenfalls Mitarbeitende sind. Deshalb möchtest du eine Tabelle manchmal mit sich selbst über unterschiedliche Spalten joinen. Die Methode .alias(), die eine Kopie einer Tabelle erstellt, hilft dir dabei. Da es sich um dieselbe Tabelle handelt, brauchst du nur eine where-Klausel, um die Join-Bedingung festzulegen.
Hier nutzt du die Methode .alias(), um eine Abfrage zu erstellen, die die Tabelle employees mit sich selbst joint, um festzustellen, wer wem berichtet.
Diese Übung ist Teil des Kurses
Einführung in Datenbanken mit Python
Anleitung zur Übung
- Speichere einen Alias der Tabelle
employeesalsmanagers. Wende dazu die Methode.alias()aufemployeesan. - Baue eine Abfrage, die den
nameder/des Mitarbeitenden und dennameder/des Manager:in auswählt. Dernameder/des Manager:in ist bereits für dich ausgewählt. Verwendelabel, um diename-Spalte vonemployeesals'employee'zu beschriften. - Hänge an
stmteine where-Klausel an, die Zeilen abgleicht, bei denen die Spalteidder Tabellemanagersder Spaltemgrder Tabelleemployeesentspricht. - Sortiere das Statement nach der Spalte
nameder Tabellemanagers. - Führe das Statement aus und speichere alle Ergebnisse. Dieser Code ist bereits geschrieben. Antwort senden, um die Namen der Manager:innen und all ihrer Mitarbeitenden auszugeben.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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)