Một cách tiếp cận đơn giản sử dụng tổng hợp:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
Truy vấn trên là sargable , nghĩa là một chỉ mục thích hợp có thể sử dụng idSkill
cột. Xem xét thêm chỉ mục này để tăng hiệu suất:
CREATE INDEX idx ON skills (idUser, idSkill);
Chỉnh sửa:
Sử dụng truy vấn này cho 3 mục:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;