求查询未支付指定月份费用的学生详情的SQL语句
查询未缴纳指定月份费用的学生信息
以下是几种实用的实现方案,可根据你的实际场景选择:
方法1:LEFT JOIN + IS NULL
通过左连接匹配学生与对应月份的缴费记录,筛选无有效缴费记录的学生:
SELECT sd.* FROM studentdetails sd LEFT JOIN payment p ON sd.sid = p.sid AND p.month IN ('september', 'october') WHERE p.sid IS NULL;
方法2:NOT EXISTS
通过子查询校验是否存在指定月份的缴费记录,不存在则返回学生信息:
SELECT sd.* FROM studentdetails sd WHERE NOT EXISTS ( SELECT 1 FROM payment p WHERE p.sid = sd.sid AND p.month IN ('september', 'october') );
推荐:基于日期字段的筛选版本
如果paymentdate是标准日期类型,建议用日期函数筛选月份,避免字符串month字段的拼写误差:
SELECT sd.* FROM studentdetails sd WHERE NOT EXISTS ( SELECT 1 FROM payment p WHERE p.sid = sd.sid AND MONTH(p.paymentdate) IN (9, 10) -- 9代表九月,10代表十月 );
注意事项
- 确保
month字段的字符串值与查询条件完全匹配(示例中Octomber应为October,实际使用时需修正拼写) - 若使用
NOT IN方案,需注意payment表中sid不能存在NULL值,否则会导致结果异常,因此优先推荐前两种方法
内容的提问来源于stack exchange,提问作者Gacha SS
相关产品推荐
相关产品推荐

