Heim  >  Artikel  >  Datenbank  >  Beispiele für die Verwendung von MySQL Advanced Join-Self-Join

Beispiele für die Verwendung von MySQL Advanced Join-Self-Join

巴扎黑
巴扎黑Original
2017-05-11 10:51:561336Durchsuche

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:

Beispiele für die Verwendung von MySQL Advanced Join-Self-Join

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.

Beispiele für die Verwendung von MySQL Advanced Join-Self-JoinUm 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn