Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Join e múltiplo e condições


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