Deberá usar una combinación de IN()
y GROUP BY ... HAVING
lograr esto. Tampoco es necesario unirse si todo lo que necesita es una identificación de usuario. Así que 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 */
Si necesita ID y nombres de usuario, simplemente puede unirse a este conjunto de registros derivado de la consulta anterior como un filtro para la tabla de usuarios:
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