Da ist SQL als mengenorientierte Abfragesprache entwickelt worden, und dann wird in allen gängigen Datenbanksystemen der Mengendurchschnitt, also der INTERSECT Befehl, nur “eingeschränkt” oder gar nicht unterstützt.

In MySQL wurde der Befehl gar nicht erst implementiert.

Mengendurchschnitt

Weil mich das eine halbe Stunde gekostet hat, bis ich drauf gekommen bin dass der Befehl gar nicht implementiert ist, schreib ich jetzt einen Post darüber.

Der SQL2003 Standard für den INTERSECT-Befehl lautet:

<SELECT statement1>
INTERSECT [ALL | DISTINCT]
[CORRESPONDING [BY (column1, column2, ...)] ]

Die Beschreibung dazu:

Der Mengenoperator INTERSECT holt aus mehreren Abfragen die Zeilen ab, die in den ersten und zweiten (und möglicherweise noch weiteren) Ergebnismengen übereinstimmen. In mancher Hinsicht gleicht INTERSECT einem INNER JOIN.

Quelle: SQL in a Nutshell, 2. Auflage, Seite 333

Ich hab mir mal schnell eine Alternative ausgedacht. Sie ist zwar nicht voll kompatibel, aber es ist ein Anfang:

(SELECT DISTINCT column1, column2, ... FROM Tabelle1 [...]) alias1
INNER JOIN
(SELECT DISTINCT column1, column2, ... FROM Tabelle2 [...]) alias2
USING (column1, column2, ...)

Das holt aus zwei Anfragen ( man kann natürlich auch mehrere miteinander verketten) alle Tupel (= Reihen), welche die gleichen Inhalte in column1, column2, … haben. Relevant sind nur die Spalten in der USING-Klausel.

Vielleicht hilft’s ja jemandem. Wenn jemand eine bessere Idee hat, oder schon irgendwo eine fertige Lösung gefunden hat, bitte eine Antwort in den Kommentaren hinterlassen!

Kommentar hinterlassen

benötigt

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>