Bạn sẽ cần sử dụng kết hợp IN()
và GROUP BY ... HAVING
để đạt được điều này. Cũng không cần tham gia nếu tất cả những gì bạn cần là ID người dùng. Vì vậy, một cái gì đó như:
SELECT user, COUNT(attribute) AS attribute_count
FROM attributes
WHERE attribute IN(...) /* include your set of attributes here */
GROUP BY user
HAVING attribute_count = ? /* include number equal to number of attribute ID's in IN() above */
Nếu bạn cần id người dùng và tên, bạn có thể chỉ cần tham gia tập hợp bản ghi này bắt nguồn từ truy vấn ở trên dưới dạng bộ lọc cho bảng người dùng:
SELECT user.id, user.name
FROM user
INNER JOIN
(
SELECT user, COUNT(attribute) AS attribute_count
FROM attributes
WHERE attribute IN(...) /* include your set of attributes here */
GROUP BY user
HAVING attribute_count = ? /* include number equal to number of attribute ID's in IN() above */
) AS filter
ON user.id = filter.user