![]() |
Fortgeschrittene Jointechniken:
|
Sie können eine Tabelle auch mit sich selbst verknüpfen, diesen Typ des JOINs nennt man Selfjoin.
Sie möchten z.B. für eine spezielle Marketingaktion wissen, welche Kunden sowohl über eine Mastercard als auch eine Kreditkarte von American Express verfügen. Ein Selfjoin kann Ihnen helfen, die gewünschten Daten zu erhalten.
Im ersten Schritt verknüpfen Sie die Tabelle mit sich selbst, als Verknüpfungsfeld wählen Sie KdnNr, die Kundennummer.
SELECT KK1.KndNr, KK1.Firma, KK2.KndNr, KK2.Firma FROM Kreditkarten AS KK1 INNER JOIN Kreditkarten AS KK2 ON KK1.KndNr = KK2.KndNr KndNr Firma KndNr Firma ----------- ------------------ ----------- ------------------ 123457 VISA 123457 VISA 123459 Mastercard 123459 Mastercard 123459 American Express 123459 Mastercard 123459 Mastercard 123459 American Express 123459 American Express 123459 American Express 123458 Diners Club 123458 Diners Club 123458 VISA 123458 Diners Club 123458 Diners Club 123458 VISA 123458 VISA 123458 VISA (9 row(s) affected)
Sie greifen hier zweimal auf die gleiche Tabelle zu, die über die Spalte KndNr verknüpft sind. Um die beiden "Tabellen" voneinander zu unterscheiden verwenden Sie dazu Aliasnamen in der FROM- und JOIN-Klausel. Diese ermöglichen es Ihnen, in der Feldliste und in den Bedingungen die Herkunft der Daten anzugeben. Bei Kunden mit mehr als einer Kreditkarte werden alle möglichen Kombinationen angegeben - Dies ist vergleichbar mit dem CROSS JOIN, vgl.
Einführung in Joins von Rouven Thimm - Im nächsten Schritt filtern wir zusätzlich die Ergebnismenge:
Nun möchten Sie nicht alle möglichen Kombinationen von Kundennummern und zugehörigen Kreditkarten haben, sondern wissen, wer sowohl eine 'Mastercard' und eine 'American Express' hat. Dazu nutzen Sie die WHERE-Klausel.
SELECT KK1.KndNr, KK1.Firma, KK2.KndNr, KK2.Firma FROM Kreditkarten AS KK1 INNER JOIN Kreditkarten AS KK2 ON KK1.KndNr = KK2.KndNr WHERE KK1.Firma = 'Mastercard' AND KK2.Firma = 'American Express' KndNr Firma KndNr Firma ----------- ------------------ ----------- ------------------ 123459 Mastercard 123459 American Express (1 row(s) affected)
Die WHERE-Klausel filtert aus der Vereinigungstabelle genau die Datensätze aus, die Sie haben möchten. Es bleibt genau ein Datensatz übrig, der Kunde mit der KndNr 123459. Wenn Sie Details zu diesem Kunden haben möchten, so benötigen Sie einen weiteren JOIN mit der Kundentabelle. JOINs über mehrere Tabellen werden im folgenden Abschnitt behandelt.
Der Selfjoin kann unperformant sein, insbesondere wenn es in den Join-Spalten viele Werte gibt, die mehrfach auftreten. Spalten, deren Werte man nicht benötigt, sollte man normalerweise nicht in der Spaltenliste aufführen.
© 2007
Impressum, für diese Seite:
vinzenzmai@web.de