SQL-Abfrage ohne Hilfsabfragen

21/02/2008 - 15:28 von thomastaunus | Report spam
Hallo,
ich möchte eine Abfrage erstellen, die sich über drei Tabellen
erstreckt und ohne eine Hilfsabfrage (so hat das bisher problemlos
unter Access funktioniert) auskommen muss, da ich ein Recordset mit
den Daten von einem SQL-Server füllen möchte, das wiederrum ein Grid
befüllen soll.

Um das ganze vereinfacht darzustellen, habe ich die Tabellen
"Gruppen", "Adressen" und "Verbindungen" genannt und nur mit den
nötigsten Feldern versehen:

Gruppen: G_ID, Gruppenname
Adressen: A_ID, Namen
Verbindungen: Grp_ID, Name_ID

Beziehungen: G_ID mit Grp_ID
A_ID mit Namen_ID

Beispiel:
Herr Müller(A_ID=1) wurde den Gruppen "Presse(G_ID=3)" und
"Einkauf(G_ID=7)" zugeordnet. Die Eintràge in der Tabelle
"Verbindungen" lautet nun
Grp_ID=1 / Name_ID=3 und Grp_ID=1 / Name_ID=7

Nun benötige ich zwei Abfragen (um zwei Grids zu füllen):

1. Die Gruppen (G_ID und Gruppenname), die Herrn Müller zugewiesen
sind (diese Abfrage ist schon fertig)

2. Die Gruppen (A_ID und Gruppenname), die Herrn Müller nicht
zugewiesen sind.

Wie oben schon angedeutet, habe ich in der Vergangenheit (unter
Access) einfach eine Hilfsabfrage geschaffen und eine weitere Abfrage
"draufgesetzt".

Da ich nun einen SQL-Server als "BackEnd" habe, benötige ich ein SQL-
Statement, mit dem ich die entsprechenden Informationen abrufen kann.
Ich habe schon versucht, mit "EXISTS" eine Unterabfrage zu erstellen,
kam hier aber leider nicht weiter!

Es wàre prima, wenn mir an der Stelle jemand helfen könnte.
Danke.

Gruß

Thomas
 

Lesen sie die antworten

#1 Thomas Schremser
21/02/2008 - 16:13 | Warnen spam
Hallo Thomas!

Ohne jetzt zu wissen, was Du mit "Hilfsabfrage" meinst (ich hab's nicht so
mit Access) würde ich das am SQL-Server so machen:

SELECT *
FROM (
SELECT G_ID, Gruppenname
FROM Gruppen
) G
INNER JOIN Adressen A ON 1 = 1
WHERE A.A_ID = 1
AND G.G_ID NOT IN
(
SELECT Grp_ID
FROM Verbindungen
WHERE Name_ID != 1
)

HTH

Grüße
Thomas

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler

Ähnliche fragen