下面的内容将使您或多或少地简化您的条件,尽管我不能保证拥有100,000多个具有30多个属性的人会非常有效。您应该自己看看。
SELECT g.name guy, a.name attribute, v._value value
FROM guy g
JOIN _value v ON g.id = v.guy_id
JOIN attribute a ON a.id = v.attribute_id
GROUP BY guy
HAVING (
SUM(a.name = 'age' and v._value > 10) = 1 AND
SUM(a.name = 'dollars' and v._value < 18) = 1 AND
SUM(a.name = 'candies' and v._value > 2 ) = 1 AND
SUM(a.name = 'candies' and v._value < 10) = 1
)
OR
(
SUM(a.name = 'age' and v._value = 15) = 1
)