我想使用类似于以下内容的查询来检索 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'

最佳答案


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
)

关于MySQL GROUP BY ...在同一字段中具有不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33647944/

10-13 08:47