LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Speichere einen Alias der Tabelle employees als managers. Wende dazu die Methode .alias() auf employees an.
  • Baue eine Abfrage, die den name der/des Mitarbeitenden und den name der/des Manager:in auswählt. Der name der/des Manager:in ist bereits für dich ausgewählt. Verwende label, um die name-Spalte von employees als 'employee' zu beschriften.
  • Hänge an stmt eine where-Klausel an, die Zeilen abgleicht, bei denen die Spalte id der Tabelle managers der Spalte mgr der Tabelle employees entspricht.
  • Sortiere das Statement nach der Spalte name der Tabelle managers.
  • 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)

Code bearbeiten und ausführen