在最一般的情况下,我有如下查询:
SELECT tutor_school.name, count(*), tutor_school.schoolid
FROM tutor_school, tutor_attends, tutor_tutors_in
WHERE
tutor_school.schoolid = tutor_attends.schoolid and
tutor_school.schoolid in ('1', '2', '3') and
tutor_attends.userid=tutor_tutors_in.userid
group by tutor_school.schoolid LIMIT 0, 10
本质上,我想要:
学校名称,就读该学校任教的学生人数,Schoolid
我实际上得到的是
学校名称,该学校学生教授的所有科目的总和,schoolid——换句话说,如果学生 1 辅导 3 个科目,学生 2 辅导 5 个科目,那么我得到 8 而不是返回 2!
我已经意识到问题在于以下声明:
tutor_attends.userid=tutor_tutors_in.userid
这不是检查远程表中给定外键的存在,而是为该键的每个实例提供结果。
我想弄清楚的是如何绑定它以将其限制为简单地存在给定键,而不是键出现的次数。我知道我在我的 SQL 课程中看到过类似的案例,但我不记得解决方案是什么。