Você precisará usar uma combinação de
IN()
e GROUP BY ... HAVING
Para alcançar isto. Também não há necessidade de uma associação se tudo o que você precisa é de IDs de usuário. Então algo como: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 */
Se você precisar de ids e nomes de usuários, basta juntar este conjunto de registros derivado da consulta acima como um filtro para a tabela de usuários:
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