Mysql
 sql >> Database >  >> RDS >> Mysql

Unisci e multipli e condizioni

Dovrai usare una combinazione di IN() e GROUP BY ... HAVING Per realizzare questo. Inoltre, non è necessario unire se tutto ciò di cui hai bisogno sono gli ID utente. Quindi qualcosa come:

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 hai bisogno di ID utente e nomi, puoi semplicemente unire questo set di record derivato dalla query sopra come filtro alla tabella utenti:

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