I come across this pattern occasionally and I haven\'t found a terribly satisfactory way to solve it.
Say I have a employee table and an review>
It's possible. The particular syntax depends on how you store 'good' and 'bad' reviews.
Suppose you had a classification column in review that had values 'good' and 'bad'.
Then you could do:
SELECT employee.*
FROM employee
JOIN review
ON employee.id=review.employee_id
GROUP BY employee.id
HAVING SUM(IF(classification='good',1,0))>0 -- count up #good reviews, > 0
AND SUM(IF(classification='bad',1,0))=0 -- count up #bad reviews, = 0.