You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何筛选MySQL子查询中attended_courses为0的行?

解决方法:筛选出attended_courses = 0的行

嗨,很高兴能帮到你!你现在要筛选出attended_courses等于0的行,这里有两种靠谱的方法,我都给你详细说明下:

方法一:使用HAVING子句(基于你原有的查询修改)

因为attended_courses是通过子查询计算出来的衍生列,WHERE子句在SQL执行顺序中早于SELECT,所以无法直接引用这个别名来过滤。而HAVING子句是在SELECT之后执行的,刚好能解决这个问题。修改后的查询语句如下:

SELECT 
    id, 
    lastname, 
    firstname, 
    (SELECT COUNT(courses.id) 
     FROM courses 
     LEFT JOIN members_courses ON courses.id = members_courses.course_id 
     WHERE members_courses.member_id = members.id) AS attended_courses 
FROM members 
HAVING attended_courses = 0 
LIMIT 10;

方法二:改用LEFT JOIN重写查询(性能更优)

如果你的数据量比较大,用JOIN的方式替代子查询通常会有更好的性能,写法也更直观。这里我们通过关联表后分组统计,再筛选出课程数量为0的成员:

SELECT 
    m.id, 
    m.lastname, 
    m.firstname, 
    COUNT(c.id) AS attended_courses 
FROM members m 
LEFT JOIN members_courses mc ON m.id = mc.member_id 
LEFT JOIN courses c ON mc.course_id = c.id 
GROUP BY m.id, m.lastname, m.firstname 
HAVING COUNT(c.id) = 0 
LIMIT 10;

两种方法都能达到你的需求,你可以根据自己的实际场景选择合适的方式~

内容的提问来源于stack exchange,提问作者Alessio De Feudis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:29