Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Zeige m, wo nicht n

m:n-Beziehungen haben so ihre Tücken: Wenn Sie beispielsweise alle Bestellungen anzeigen möchten, die einen bestimmten Artikel nicht enthalten, ist das nicht so einfach. Um den Einsatz einer Unterabfrage kommen Sie da nicht herum.

Ausschließende Unterabfrage

Alle Bestellungen anzuzeigen, die einen bestimmten Artikel enthalten, ist kein Problem - erzeugen Sie einfach eine Abfrage mit den beteiligten Tabellen (m-Seite, n-Seite und Verknüpfungstabelle) und verwenden Sie das gewünschte Feld der n-Seite als Kriterium. Die passende Abfrage zeigt Bild 1.

Bild 1: Diese Abfrage liefert alle Bestellungen mit einem bestimmten Artikel

Diese Abfrage ist indirekt der Schlüssel zur eigentlichen Lösung: Wenn Sie wissen, welche Bestellungen alle einen bestimmten Artikel enthalten, dann können Sie damit auch alle verbleibenden Bestellungen ermitteln. Dazu verwenden Sie obige Abfrage einfach als Unterabfrage in einem Kriterium.

Dabei ist eins zu beachten: Die Unterabfrage darf nur ein Feld ausgeben - in dem Fall das Feld Bestell-Nr.

Die Lösung finden Sie in Bild 2. Der nicht komplett zu erkennende SQL-Ausdruck in der Kriterienspalte lautet so:

Nicht In (SELECT Bestellungen.[Bestell-Nr] FROM Bestellungen INNER JOIN (Artikel INNER JOIN Bestelldetails ON Artikel.[Artikel-Nr] = Bestelldetails.[Artikel-Nr]) ON Bestellungen.[Bestell-Nr] = Bestelldetails.[Bestell-Nr] WHERE (((Artikel.[Artikel-Nr])=[Artikelnummer]));)

 

Bild 2: Eine Unterabfrage als Kriterium schmeißt alle Bestellungen raus, die einen bestimmten Artikel enthalten

© 2003-2010 André Minhorst Alle Rechte vorbehalten.