Ein einfacher Ansatz verwendet die Aggregation:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
Die obige Abfrage ist sargable , was bedeutet, dass ein geeigneter Index den idSkill
verwenden kann Säule. Erwägen Sie, diesen Index für zusätzliche Leistung hinzuzufügen:
CREATE INDEX idx ON skills (idUser, idSkill);
Bearbeiten:
Verwenden Sie diese Abfrage für 3 Elemente:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;