Hallo!

> Ich habe 4 Tabellen:
> Mitarbeiter, Netzwerkbenutzer, Men� und Rechte
> Nun m�chte ich alle Benutzer anzeigen lassen, die
> 
> a) Berechtigungen f�r bestimmte Men�punkte besitzen und
> b) keine Berechtigungen f�r bestimmte Men�punkte besitzen
> 
> die Abfrage f�r a) funktioniert und sieht wie folgt aus:
> 
> SELECT Mitarbeiter.Vorname, Mitarbeiter.Nachname, NetzwerkUser.ID FROM
OLMenue INNER JOIN
> ((NetzwerkUser INNER JOIN Mitarbeiter ON NetzwerkUser.ID =
Mitarbeiter.NetzwerkUser) INNER JOIN
> OLMenueRechte ON NetzwerkUser.ID = OLMenueRechte.IDBenutzer) ON
OLMenue.ID =
> OLMenueRechte.IDMenuepunkt WHERE OLMenue.ID = " & ID & " GROUP BY
Mitarbeiter.Vorname,
> Mitarbeiter.Nachname, NetzwerkUser.ID, OLMenue.Menuepunkt

Sch�n, dass a) funktioniert. Aber 4 Joins und Gruppierung sind ein
bisschen viel, oder?

SELECT   Mitarbeiter.Vorname, Mitarbeiter.Nachname, NetzwerkUser.ID
FROM     Mitarbeiter  INNER JOIN
         NetzwerkUser ON Mitarbeiter.NetzwerkUser = NetzwerkUser.ID
WHERE    NetzwerkUser.ID IN
         (SELECT IDBenutzer FROM OLMenueRechte WHERE IDMenuepunkt =
<<<ID>>>)
ORDER BY ...

Also kein GROUP BY, aber ggf. ein ORDER BY. Du verkn�pfst lediglich die
Dateien, aus denen du Werte anzeigst. Ein geschachteltes SELECT liefert
Dir dann die restlichen Kriterien. So ist das viel schneller.

Und die Umkehrung?

Anstatt "WHERE NetzwerkUser.ID IN ..." schreibst Du einfach "WHERE
NetzwerkUser.ID NOT IN ...". Jetzt hat alles eine korrekte Logik, oder?

Freundliche Gr��e
Joachim van de Bruck

PS: Noch ein TIPP - f�r den Fall, dass meine Trocken�bung nicht auf
Anhieb funktioniert) - Solche Dinge mit dem Query Analyser Schritt f�r
Schritt aufbauen, also zuerst das innere SELECT und dann damit das
�u�ere. 



| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp

Antwort per Email an