Un semplice approccio utilizza l'aggregazione:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
La query precedente è sargable , il che significa che un indice appropriato può utilizzare idSkill
colonna. Prendi in considerazione l'aggiunta di questo indice per aumentare il rendimento:
CREATE INDEX idx ON skills (idUser, idSkill);
Modifica:
Usa questa query per 3 elementi:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;