2013-05-17 123 views
1

大家好我有一個SQL查詢的問題:問題是,如果我添加GROUP BY數據庫引擎輸出錯誤:錯誤查詢:聚合函數或GROUP BY子句

Column 'dbo.classes.class_name' is invalid in the select list because 
it is not contained in either an aggregate function or the GROUP BY clause. 

我的查詢:

string query = "SELECT p.* 
       FROM dbo.classes AS p INNER JOIN teacher_classes AS a 
       ON a.class_id = p.class_id 
       and teach_id = @id 
       GROUP BY p.class_id"; 

請問有沒有什麼幫助。

注意沒有分組的查詢工作正常,但結果沒有分組。

+1

你在分組什麼?你想要實現什麼業務邏輯? GROUP BY子句只需要像COUNT或SUM這樣的聚合函數,顯然你的查詢缺乏, – APC

回答

3

您所查詢的是:

SELECT p.* 
FROM dbo.classes AS p INNER JOIN 
    teacher_classes AS a 
    ON a.class_id = p.class_id and teach_id = @id 
GROUP BY p.class_name; 

您嘗試選擇所有的從P列,但你被CLASS_NAME分組。這在大多數數據庫中是不允許的。如果你有兩個班,會發生什麼情況,但是信息與他們不同?

一種選擇是使用distinct而非group by刪除重複:

SELECT distinct c.* 
FROM dbo.classes c INNER JOIN 
    teacher_classes tc 
    ON tc.class_id = c.class_id and tc.teach_id = @id; 

另一種選擇是使用類似in找到教師配套類:

select c.* 
from classes c 
where c.class_id in (select tc.class_id from teacher_classes where teach_id = @id) 

通知我也改變了你的別名,所以他們與表名有一些關係。這使得查詢更容易閱讀。

+0

感謝Gordon Linoff,你的回答非常有幫助,我的查詢現在可以正常工作。 –

相關問題