最も一般的なケースでは、次のようなクエリがあります。
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の場合、2を返す代わりに8を取得します。
問題は次のステートメントにあることに気づきました。
tutor_attends.userid=tutor_tutors_in.userid
これは、リモートテーブル内の特定の外部キーの存在をチェックするのではなく、そのキーの各インスタンスの結果を提供します。
私が理解しようとしているのは、キーが発生する回数ではなく、指定されたキーの存在だけに制限するようにバインドする方法です。私のSQLクラスでこれに似たケースを見たことは知っていますが、解決策が何であったかを思い出せません。