Databases Reference
In-Depth Information
Die Syntax für einen einfachen Selfjoin sieht wie folgt aus:
SELECT t1.<Spaltenname>, t2. <Spaltenname>
FROM <Tabelle>t1, <Tabelle>t2
WHERE t1 <SpalteX> = t2 <SpalteX>
In diesem Fall sind die Tabellen identisch, sie werden nur durch die Vergabe unterschied-
licher Aliasnamen virtuell zu unterschiedlichen Tabellen.
Wir werden die Tabelle
order_history
dreimal miteinander joinen. Als Alias vergeben wir
die Bezeichnungen
h1
,
h2
und
h3
. Aus der Tabelle
h1
holen wir uns das Datum der ersten
Bestellung, aus
h2
das der zweiten Bestellung und aus
h3
das dritte Datum. Das kann man
beliebig fortsetzen. Wir beschränken uns vorerst auf die ersten drei Bestellungen.
SELECT h1.riskID,
DATEDIFF ( day ,h1.Datum , h2.Datum )Tage_1_2,
DATEDIFF ( day ,h2.Datum , h3.Datum )Tage_2_3
FROM [dbo].[order_history]h1, [dbo].[order_history]h2, [dbo].[order_history]h3
where h1.riskID = h2.riskID
and h1.riskID = h3.riskID
and h1.lfdNr = 1
and h2.lfdNr = 2
and h3.lfdNr = 3
Das Ergebnis sehen Sie in Bild 16.2.
Bild 16.2■
Ergebnis des Selfjoins
Bei diesem Selfjoin werden nur die Fälle ausgegeben, bei denen es auch mindestens drei
Bestellungen gibt. Es gibt aber Kunden, bei denen kein drittes Datum autritt. Die dritte
Tabelle
h3
müssen wir deshalb mit einem
OUTER JOIN
verbinden.