2016-08-01 164 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` 

查詢聯接三個表: 1)student_main這是主表和存儲的學生信息。 2)sub_subjects這是存儲主題/課程信息的主表 3)student_subjects此表包含student_id和subs_id作爲外鍵,並顯示學生正在學習的科目。

以下是student_subjects表的截圖。

enter image description here

現在,當我運行查詢,它應該在的輸出,因爲一共有3名學生正在研究與ID爲1的主題,而是查詢給了我一個輸出類似這樣的顯示3:

enter image description here

請幫助。

+1

當您使用'group by'時,所有聚合函數(如'count()')適用於每個組,而不適用於由於group by而導致的完整結果集 –

+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子句。

+0

感謝您的答案。我用簡單的連接寫了所有的查詢。我希望它不會產生任何問題? –

+1

@Ajmal自1992年以來,「簡單」連接被有效地棄用。這大約是四分之一世紀前的事情。是時候放棄壞習慣了。 – Tomalak

+0

我將從現在開始放棄它,但我已經在我的項目中的很多地方使用過它。我希望它不會有任何問題。 –