Uma abordagem simples usa agregação:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
A consulta acima é sargável , o que significa que um índice apropriado pode usar o
idSkill
coluna. Considere adicionar este índice para aumentar o desempenho:CREATE INDEX idx ON skills (idUser, idSkill);
Editar:
Use esta consulta para 3 itens:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;