MySQL GROUP BY ...具有不同的值相同的字段

Wil*_*ill 3 mysql join group-by having

我想用类似下面的检索中的所有行的查询events有至少一个相应event_attendances的行'male''female'.下面的查询不返回行(其中当然有一些events是具有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'
Run Code Online (Sandbox Code Playgroud)

jue*_*n d 7

使用

HAVING sum(ea.gender = 'female') > 0 
   AND sum(ea.gender = 'male') > 0
Run Code Online (Sandbox Code Playgroud)

要么

HAVING count(distinct ea.gender) = 2
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你应该使用子查询来获取分组时的所有数据.

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
)
Run Code Online (Sandbox Code Playgroud)