SQL歧义错误求助:train_id关联查询无法生成训练员训练次数统计
问题解决:训练员训练次数统计SQL修正
你的SQL存在三个核心问题,导致歧义错误且无法满足「显示所有训练员」的需求:
- 字段歧义:
train_id同时存在于trainer和workout表中,直接写train_id时数据库无法判断要取哪个表的字段 - 缺少分组逻辑:使用聚合函数
COUNT()时,必须通过GROUP BY指定分组字段,否则会把所有记录合并成一行统计 - JOIN类型错误:
INNER JOIN只返回两张表都有匹配记录的数据,会漏掉没有任何训练记录的训练员,需要用LEFT JOIN保留所有训练员
修正后的SQL语句
SELECT trainer.train_id AS "Trainer ID", COUNT(workout.workout_id) AS "Number of workouts" FROM trainer LEFT JOIN workout ON trainer.train_id = workout.train_id GROUP BY trainer.train_id;
关键说明
- 明确指定
trainer.train_id和workout.workout_id,彻底消除字段歧义 LEFT JOIN确保保留trainer表的所有记录,即使该训练员没有对应的训练记录GROUP BY trainer.train_id让统计按单个训练员ID独立计算COUNT(workout.workout_id)会自动将无训练记录的训练员次数统计为0,因为NULL值不会被COUNT计入
内容的提问来源于stack exchange,提问作者user19382080
相关产品推荐
相关产品推荐

