2

大家好,我有一个 SQL 查询问题:问题是如果我添加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";

请问有什么帮助吗。

注意没有按查询分组可以正常工作,但结果未分组。

4

1 回答 1

4

您的查询是:

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)

请注意,我还更改了您的别名,因此它们与表名有某种关系。这使得查询更容易阅读。

于 2013-05-17T21:05:18.423 回答