我希望SQL查询返回总行数。以下是我的询问。
SELECT COUNT(*) AS tot_std
FROM `student_main` AS sm,
`student_subjects` AS stds,
`sub_subjects` AS ss
WHERE stds.`student_id` = sm.`studen. t_id`
AND stds.`subs_id` = ss.`subs_id`
AND stds.`subs_id` = 1
AND sm.`std_postcode` LIKE '%HA02AN%'
GROUP BY stds.`student_id`
查询连接三个表:
1)student_main
这是主表并存储学生信息。
2)sub_subjects
这是存储主题/课程信息的主表
3)student_subjects
此表包含student_id和subs_id作为外键,并显示学生正在拍摄的主题。
以下是student_subjects
表的屏幕截图。
现在当我运行查询时,它应该在输出中显示3,因为共有3名学生正在研究id为1的主题,但是查询给出了这样的输出:
请帮助。
答案 0 :(得分:4)
删除GROUP BY
。并学习正确的显式JOIN
语法:
SELECT COUNT(*) AS tot_std
FROM `student_main` sm JOIN
`student_subjects` stds
ON stds.`student_id` = sm.`studen. t_id` JOIN
`sub_subjects` ss
ON stds.`subs_id` = ss.`subs_id`
WHERE stds.`subs_id` = 1 AND sm.`std_postcode` LIKE '%HA02AN%';
简单规则:从不在FROM
子句中使用逗号。 *始终使用带有JOIN
子句的显式ON
语法。