Jedno proste podejście wykorzystuje agregację:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
Powyższe zapytanie można sargować , co oznacza, że odpowiedni indeks może używać idSkill
kolumna. Rozważ dodanie tego indeksu w celu zwiększenia wydajności:
CREATE INDEX idx ON skills (idUser, idSkill);
Edytuj:
Użyj tego zapytania dla 3 elementów:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;