Une approche simple utilise l'agrégation :
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
La requête ci-dessus est sargable , ce qui signifie qu'un index approprié peut utiliser le idSkill
colonne. Envisagez d'ajouter cet index pour des performances accrues :
CREATE INDEX idx ON skills (idUser, idSkill);
Modifier :
Utilisez cette requête pour 3 éléments :
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;