Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beitreten und mehrere und Bedingungen

Sie müssen eine Kombination aus IN() verwenden und GROUP BY ... HAVING um das zu erreichen. Es ist auch kein Join erforderlich, wenn Sie nur Benutzer-IDs benötigen. Also sowas wie:

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 */

Wenn Sie Benutzer-IDs und -Namen benötigen, können Sie einfach diesen aus der obigen Abfrage abgeleiteten Datensatz als Filter der Benutzertabelle hinzufügen:

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