当我在MS SQL Management Studio中执行以下查询时,它产生了一个错误。
查询:
select u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by r.RoleName
错误:
消息8120,级别16,状态1,行2列'User.UserName'无效 在选择列表中,因为它不包含在聚合中 函数或GROUP BY子句。
我曾经使用过sql,而我认为这是一些基本的命令。但我仍然无法弄清楚原因。
注意:的
如果我使用
,则没有错误按r.RoleName,u.UserName
分组
答案 0 :(得分:4)
这演示了single-value rule
,它禁止运行GROUP BY
查询时得到的未定义结果,并且您在select-list中包含既不属于分组条件的列,也不包括出现在汇总函数(SUM, MIN, MAX, etc.)
中。希望你明白。
<强> Group By 强>
我不知道,但可能你想要这个......
select distinct u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
答案 1 :(得分:1)
GROUP BY语句与聚合函数结合使用,将结果集分组为一列或多列。
select u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by u.UserName,r.RoleName
group by用于聚合函数或用于过滤重复项。在sql-server group中,需要select而不是aggregate函数的所有列。
对于mysql,下面的查询不会抛出错误。它将为group by子句中的每个项目选择第一行。
select u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by r.RoleName