IN()
を組み合わせて使用する必要があります およびGROUP BY ... HAVING
これを達成するために。また、必要なのがユーザーIDだけであれば、参加する必要はありません。つまり、次のようなものです:
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 */
ユーザーIDと名前が必要な場合は、上記のクエリから派生したこのレコードセットをフィルターとしてusersテーブルに結合するだけです。
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