Selbstverknüpfung
Wie bereits erwähnt, besteht einer der Hauptgründe für die Verwendung von Tabellenaliasen darin, in einer einzelnen SELECT-Anweisung mehr als einmal auf dieselbe Tabelle zu verweisen. Hier ist ein Beispiel.
Angenommen, Sie finden ein Problem mit einem Artikel (dessen ID DTNTR lautet) und möchten wissen, ob andere Artikel des Lieferanten, der diesen Artikel herstellt, ebenfalls diese Probleme haben. Für diese Abfrage müssen Sie zunächst
den Lieferanten finden, der den Artikel mit der ID DTNTR herstellt, und dann andere von diesem Lieferanten hergestellte Artikel finden.
Hier ist eine Möglichkeit, dieses Problem zu lösen:
Eingabe:
select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');
Ausgabe:
Analyse : Dies ist die erste Lösung, die Unterabfragen verwendet. Die innere SELECT-Anweisung führt eine einfache Suche durch und gibt die vend_id des Artikellieferanten zurück, dessen Produktions-ID DTNTR ist. Diese ID wird in der WHERE-Klausel der externen Abfrage verwendet, um alle von diesem Lieferanten produzierten Artikel abzurufen.
Sehen Sie sich nun dieselbe Abfrage mit Verknüpfungen an:
Eingabe:
Ausgabe:select p1.prod_id,p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';Analyse : Die beiden in dieser Abfrage erforderlichen Tabellen sind tatsächlich dieselben Tabellen, daher erscheint die Produkttabelle zweimal in der FROM-Klausel. Obwohl dies völlig legal ist, ist der Verweis auf Produkte nicht eindeutig, da MySQL nicht weiß, auf welche Instanz in der Produkttabelle Sie sich beziehen.
Um dieses Problem zu lösen, werden Tabellenaliase verwendet. Das erste Vorkommen von Produkten ist der Alias p1 und das zweite Vorkommen ist der Alias p2 . Diese Aliase können nun als Tabellennamen verwendet werden. Beispielsweise verwendet eine SELECT-Anweisung das Präfix p1, um explizit den vollständigen Namen der erforderlichen Spalte anzugeben. Wenn nicht, gibt MySQL einen Fehler zurück, da es zwei Spalten mit den Namen prod_id bzw. prod_name gibt. MySQL weiß nicht, welche Spalte benötigt wird (obwohl es sich tatsächlich um dieselbe Spalte handelt). WHERE (durch Abgleich von vend_id in p1 und vend_id in p2) verbindet zunächst die beiden Tabellen, filtert dann die Daten nach prod_id in der zweiten Tabelle und gibt die erforderlichen Daten zurück.
Self-Joins anstelle von Unterabfragen werden häufig als externe Anweisungen verwendet, um Unterabfrageanweisungen zu ersetzen, die beim Abrufen von Daten aus derselben Tabelle verwendet werden. Obwohl das Endergebnis dasselbe ist, ist die Verarbeitung von Joins manchmal viel schneller als die Verarbeitung von Unterabfragen. Sie sollten beide Methoden ausprobieren, um festzustellen, welche die bessere Leistung erbringt.
Das obige ist der detaillierte Inhalt vonBeispiele für die Verwendung von MySQL Advanced Join-Self-Join. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!