Erweiterung von SQL
Tabellen-Alias
Bei Fremdschlüssel-Beziehungen werden Joins verwendet, um die Daten aus beiden beteiligten Tabellen zu verbinden (vgl. SQL-Join).
Bei der Selbstreferenz stellt sich nun das Problem, dass ja zweimal die gleiche Tabelle verwendet werden müsste, was nachvollziehbar zu einer Fehlermeldung führt. Im Beispiel sollen alle direkten Zuflüsse des Rheins gefunden werden:
SELECT fluss.Name
FROM fluss, fluss
WHERE fluss.ZielFNR = fluss.FNR -- Joinbedingung
AND fluss.Name = 'Rhein'
Lässt man die zweite fluss-Tabelle im FROM
-Teil weg, so ergibt sich zwar keine Fehlermeldung, sondern
ein leeres Ergebnis (Warum?). Die Fehlermeldung gibt schon einen Hinweis auf die Lösung:
Wird eine Tabelle in einem SQL-Befehl mehrfach benötigt, so kann die Tabelle mit einem Alias-Namen versehen werden. Für die Ausführung des SQL-Befehls sieht es dann so aus, als ob die Tabelle mehrfach vorhanden wäre. Das bedeutet, dass an allen weiteren Stellen der Alias-Name der Tabelle verwendet werden muss (Attributliste, Bedingung, Sortierung).
Im Beispiel:
SELECT zufluss.Name, zufluss.Laenge
FROM fluss AS ziel, fluss AS zufluss
WHERE zufluss.ZielFNR = ziel.FNR -- Joinbedingung (scheinbar zwei Tabellen)
AND ziel.Name = 'Rhein'
ORDER BY zufluss.Laenge DESC
Ergebnis der Abfrage:
Das gleiche Konzept kennst du schon von der Umbenennung von Attributen in der Ausgabe.