2016-08-01 7 views
0

SQLクエリで合計行数を返します。以下は私の質問です。SQL 'COUNT'関数が機能していません

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` 

問合せは、3つのテーブル結合します 1)student_mainメインテーブル格納学生の情報です。科目/コース 3に関する情報を格納するためのメインテーブルである 2)sub_subjectsstudent_subjectsこのテーブルは外部キーとしてSTUDENT_IDとsubs_idの両方で構成され、学生が取っている被験者を示しています。続き

student_subjectsテーブルのスクリーンショットです。

enter image description here

私はクエリを実行すると、3名の学生が、ID 1で件名を勉強しているので、出力に3を表示するようになっているが、代わりにクエリが私にこのような出力が得られます。

enter image description here

助けてください。

+1

'group by'を使用すると、集計関数(' count() 'など)はグループ化されているため、すべてのグループに適用され、完全な結果セットではありません –

+0

。グループを削除します。それは動作します –

答えて

4

GROUP BYを削除します。

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構文を学びます。 *常にJOINの構文でON句を使用してください。

+0

答えをありがとう。私は簡単な結合ですべてのクエリを書いています。私はそれが何の問題もないことを願っていますか? –

+1

@Ajmal「シンプルな」結合は、1992年以降、効果的に推奨されていません。これは、ほぼ4分の1世紀前です。あなたが悪い習慣を落とす時です。 – Tomalak

+0

これからは削除しますが、私はプロジェクトの多くの場所でそれを使用しています。私はそれが問題を起こさないことを願っています。 –

関連する問題