Zweifaches Verwenden einer Tabelle in einer Abfrage
Aktualisiert: November 2007
Sie können dieselbe Tabelle mehrmals innerhalb einer Abfrage verwenden. Dies kann in verschiedenen Situationen notwendig sein.
Erstellen einer Selbstverknüpfung mit einer reflexiven Beziehung Sie können eine Tabelle über eine reflexive Verknüpfung mit sich selbst verknüpfen. Bei dieser Beziehung befinden sich die verweisenden Fremdschlüsselspalten und die Fremdschlüsselspalten, auf die verwiesen wird, in derselben Tabelle. Nehmen Sie beispielsweise an, dass die Tabelle der Mitarbeiter eine zusätzliche Spalte employee.manager_emp_id enthält und dass eine Fremdschlüsselbeziehung zwischen manager_emp_id und employee.emp_id vorliegt. Innerhalb jeder Zeile der Tabelle der Mitarbeiter gibt die Spalte manager_emp_id den Vorgesetzten des Mitarbeiters an. Genauer gesagt, die emp_id des Vorgesetzten des Mitarbeiters wird angezeigt.
Durch das Verknüpfen der Tabelle mit sich selbst über eine reflexive Beziehung können Sie ein Resultset erstellen, in dem jede Zeile den Namen eines Vorgesetzten und den Namen eines diesem Vorgesetzten unterstellten Mitarbeiters angibt. Hierfür kann folgende SQL-Anweisung formuliert werden:
SELECT boss.lname, boss.fname, employee.lname, employee.fname FROM employee INNER JOIN employee boss ON employee.manager_emp_id = boss.emp_id
Weitere Informationen über das Erstellen von Verknüpfungen mithilfe reflexiver Beziehungen finden Sie unter Gewusst wie: Automatisches Erstellen von Selbstverknüpfungen.
Erstellen einer Selbstverknüpfung ohne reflexive Beziehung Sie können eine Tabelle mit sich selbst verknüpfen, ohne eine reflexive Beziehung zu verwenden. Sie können beispielsweise ein Resultset erstellen, in dem jede Zeile einen Mitarbeiter und einen potenziellen Mentor für diesen Mitarbeiter beschreibt. (Ein potenzieller Mentor ist ein Mitarbeiter mit einer höheren Tätigkeitsstufe.) Hierfür kann folgende SQL-Anweisung formuliert werden:
SELECT employee.fname, employee.lname, mentor.fname, mentor.lname FROM employee INNER JOIN employee mentor ON employee.job_lvl < mentor.job_lvl
Beachten Sie, dass in der Verknüpfung keine Gleichheitsbedingung verwendet wird. Weitere Informationen über das Verknüpfen von Tabellen mithilfe alternativer Bedingungen finden Sie unter Verknüpfen von Vergleichsoperatoren.
Weitere Informationen über das Erstellen von Selbstverknüpfungen mithilfe nicht verknüpfter Spalten finden Sie unter Gewusst wie: Manuelles Erstellen von Selbstverknüpfungen.
Zweifaches Verwenden einer Tabelle ohne eine Selbstverknüpfung Auch ohne eine Selbstverknüpfung ist es möglich, dieselbe Tabelle mehrmals in einer Abfrage zu verwenden. Sie können z. B. ein Resultset erstellen, das alle weiteren Buchtitel des Autors bzw. der Autoren Ihres Lieblingstitels enthält. In diesem Fall wird die Tabelle titleauthors zweimal abgefragt: zunächst, um die Autoren Ihres Lieblingsbuches zu ermitteln (Is Anger the Enemy?), und anschließend für eine Suche nach den anderen Büchern dieser Autoren. Hierfür kann folgende SQL-Anweisung formuliert werden:
SELECT other_title.title FROM titles favorite_title INNER JOIN titleauthor favorite_titleauthor ON favorite_title.title_id = favorite_titleauthor.title_id INNER JOIN authors ON favorite_titleauthor.au_id = authors.au_id INNER JOIN titleauthor other_titleauthor ON authors.au_id = other_titleauthor.au_id INNER JOIN titles other_title ON other_titleauthor.title_id = other_title.title_id WHERE favorite_title.title = 'Is Anger the Enemy?' AND favorite_title.title <> other_title.title
Hinweis: Um zwischen den Verwendungen einer Tabelle zu unterscheiden, verwendet die vorherige Abfrage folgende Aliase: favorite_title, favorite_titleauthor, other_titleauthor und other_title. Weitere Informationen über Aliase finden Sie unter Gewusst wie: Erstellen von Tabellenaliasen.
Siehe auch
Konzepte
Arbeiten mit Daten im Ergebnisbereich