Thomas: Schachtelungstiefe von "IN" - oder Optimierung?

Beitrag lesen

Hallo,

Ja, sag das doch gleich. Statt 50 Subselects nimm doch einfach sowas:
SELECT * FROM kriteriumstabelle WHERE benutzerid = 'benutzer' AND (kriterium = '1' OR kriterium = '2' OR kriterium = '23'....)
Du mußt im Prinzip nur alle gewünschten Kriterien, die abgefragt werden sollen, in die Klammer mit OR packen.

Hm...genaugenommen nein. Da ich ja Nutzer suche, kenne ich die NutzerID ja noch nicht. Und wenn ich ein Select * from tab where (kriterium = '1' OR kriterium = '2' OR ...) mache habe ich leider wieder (fast) alle - auch diejenigen, die eben nur die 1 erfüllen.

Du erhälst für jedes vorhandene Kriterium eine Ergebniszeile. Damit kannst du ganz wunderbar eine Liste generieren. Außerdem geht es sicherlich wesentlich schneller.
Was noch gut gehen kann (ich hab keine Ahnung, was das SQL von Access so kann), sind Mengenoperationen:
SELECT ... WHERE benutzerid = 'benutzer' AND kriterium IN ('1','2','23',...)

Jepp, sowas geht. Nur mit dem gleichen Problem wie oben.
Cheatah hat eigentlich die optimale Lösung gehabt - anhand von COUNT. Damit sollte auch eine OR-Verknüpfung wieder laufen. Nur das ich auf _die_ Idee wirklich nicht gekommen wäre...

Erstmal schönen Abend noch, viele Grüße & Danke

Thomas