当我在 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 子句。
注:
我使用的话没有错误
group by r.RoleName, u.UserName
这演示了
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
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