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