我想使用类似于以下内容的查询来检索事件中的所有行,这些行至少有一个对应的’male’和’female’的event_attendances行.以下查询不返回任何行(其中肯定有一些事件具有来自两个性别的event_attendances).
有没有一种方法可以在没有子查询的情况下执行此操作(由于在我的应用程序中生成SQL的方式,子查询对我来说实现起来要困难得多)?
SELECT * FROM events e
LEFT JOIN event_attendances ea ON (e.id = ea.event_id)
GROUP BY e.id
HAVING ea.gender = 'female' AND ea.gender = 'male'
解决方法:
使用
HAVING sum(ea.gender = 'female') > 0
AND sum(ea.gender = 'male') > 0
要么
HAVING count(distinct ea.gender) = 2
顺便说一句,你应该使用子查询来获取分组时的所有数据.
SELECT *
FROM events
where id in
(
SELECT events.id
FROM events
LEFT JOIN event_attendances ON (events.id = event_attendances.event_id)
GROUP BY events.id
HAVING count(distinct event_attendances.gender) = 2
)