Mysql
 sql >> Base de données >  >> RDS >> Mysql

Joindre et multiple et conditions

Vous devrez utiliser une combinaison de IN() et GROUP BY ... HAVING pour y parvenir. Aussi, pas besoin d'une jointure si tout ce dont vous avez besoin est l'ID utilisateur. Donc quelque chose comme :

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 vous avez besoin d'identifiants et de noms d'utilisateurs, vous pouvez simplement joindre cet ensemble d'enregistrements dérivé de la requête ci-dessus en tant que filtre de la table des utilisateurs :

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