Ще трябва да използвате комбинация от IN()
и GROUP BY ... HAVING
за да постигнем това. Също така няма нужда от присъединяване, ако всичко, от което се нуждаете, е потребителски идентификатор. Така че нещо като:
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 */
Ако имате нужда от потребителски идентификатори и имена, можете просто да се присъедините към този набор от записи, извлечен от заявката по-горе като филтър към таблицата с потребители:
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