Teil von SELFHTML aktuell Teil von Artikel Teil von Datenbanken Teil von Fortgeschrittene Jointechniken

Fortgeschrittene Jointechniken:
Selfjoin

nach unten Der Selfjoin

Der Selfjoin

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.

1. Schritt - SELFJOIN

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)

Erläuterung:

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. Seite Einführung in Joins von Rouven Thimm - Im nächsten Schritt filtern wir zusätzlich die Ergebnismenge:

2. Schritt - SELFJOIN mit einschränkender WHERE-Klausel

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)

Erläuterung:

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.

Zu beachten:

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.

weiter Seite Mehrere Tabellen mit JOIN verknüpfen

zurück Seite Beispieldatenbank

Teil von SELFHTML aktuell Teil von Artikel Teil von Datenbanken Teil von Fortgeschrittene Jointechniken

© 2007 bereichsübergreifende Seite Impressum, für diese Seite: E-Mail vinzenzmai@web.de