1

当我在 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 分组

4

2 回答 2

4

这演示了single-value rule,它禁止您在运行GROUP BY查询时获得未定义的结果,并且您在选择列表中包含既不属于分组条件的一部分,也不出现在聚合函数中的任何列(SUM, MIN, MAX, etc.)。希望你明白。

通过...分组

我不知道,但可能你想要这个..

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
于 2013-07-31T11:10:06.417 回答
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 by 中需要 select 中的所有列,而不是聚合函数。

在 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
于 2013-07-31T11:05:33.043 回答