2 Kriterien:
SELECT s1
FROM myTab
WHERE s2 = ‚x‘
INTERSECT
SELECT s1
FROM myTab
WHERE s2 = ‚y‘;
Ich bin leider arm und hab nur eine MySQL. Die scheint kein INTERSECT zu koennen. Tatsaechlich ist das aber genau das, was ich machen will: Schnittmengen bilden. Haette ich ja mal googlen koennen…
Wenn die Paare (s1,s2) eindeutig
Ja, es gibt ein constraint unique (s1, s2).
sind geht auch der hier:
SELECT s1, COUNT(*)
FROM myTab
WHERE s2 IN (‚x‘,‚y‘)
GROUP BY s1
HAVING COUNT(*) = 2;
bzw.
SELECT s1, COUNT(*)
FROM myTab
WHERE s2 IN (‚x‘,‚y‘,‚z‘)
GROUP BY s1
HAVING COUNT(*) = 3;
Hm, das sieht ja eigentlich huebsch uebersichtlich aus und wuerde mir persoenlich sogar am besten gefallen. Allerdings stellt es sich gerade etwas bockig an, wenn ich es als subselect verwende und entgegen Deiner Vermutung braucht das aber tatsaechlich laenger als die andere vorgeschlagene Loesung (die dann wohl ein join ist). Weiterhin scheint es nicht zu funktionieren, wenn in der Vergleichsmenge doppelte Elemente vorhanden sind, also die Anfrage degeneriert zu „gib mir alle Elemente aus S1, fuer die in S2 x und x steht“, was der gesunde Menschenverstand (alternativ die Boolsche Algebra) natuerlich runterbricht auf „gib mir alle Elemente aus S1, fuer die in S2 x steht“, dieses SQL statement aber nicht, das join schon. Auf doppelte Elemente muss ich hier extern pruefen.
und dann wäre da noch die Variante mit
SELECT s1
FROM myTab o
WHERE s2 = ‚x‘
AND EXISTS (SELECT s1
FROM myTab i1
WHERE i1.s1 = o.s1
AND i1.s2 = ‚y‘);
bzw.
SELECT s1
FROM myTab o
WHERE s2 = ‚x‘
AND EXISTS (SELECT *
FROM myTab i1
WHERE i1.s1 = o.s1
AND i1.s2 = ‚y‘)
AND EXISTS (SELECT *
FROM myTab i2
WHERE i2.s1 = o.s1
AND i2.s2 = ‚z‘);
Hm, das schaut eigentlich auch nicht so schlecht aus. Tendenziell ist das aber aus Anwendungssicht auch nicht einfacher zu bauen als der join: ich muss einen Tabelleniterator mitschleppen, Listen mit Bedingungen erweitern, usw. Wesentlicher Unterschied duerfte sein, dass ich das andere schon fertig hab. 
Trotzdem Danke, vielleicht muss ich das mal aus irgendwelchen Gruenden umstellen.
Gruss vom Frank.