【发布时间】:2023-03-09 05:49:01
【问题描述】:
我有以下表格:
create table User
(
Id int not null primary key clustered (Id),
Name nvarchar(255) not null
)
create table dbo.UserSkill
(
UserId int not null,
SkillId int not null,
primary key clustered (UserId, SkillId)
)
给定一组技能 ID,我需要获取拥有所有这些技能 ID 的用户:
select Users.*
from Users
inner join UserSkills on Users.Id = UserSkills.UserId
where UserSkills.SkillId in (149, 305)
group by Users.Id
having count(*) = 2
我收到以下错误:
选择列表中的“Users.Name”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
我错过了什么?
附加问题:
- 是否有更快的查询来完成相同的结果?
- 如何通过
SkillsIds,例如(149, 305) 作为参数?并将@SkillsIds计数设置为having count(*) = 2而不是2?
更新
以下代码正在运行,我得到了用户 John。
declare @Users table
(
Id int not null primary key clustered (Id),
[Name] nvarchar(255) not null
);
declare @Skills table
(
SkillId int not null primary key clustered (SkillId)
);
declare @UserSkills table
(
UserId int not null,
SkillId int not null,
primary key clustered (UserId, SkillId)
);
insert into @Users
values (1, 'John'), (2, 'Mary');
insert into @Skills
values (148), (149), (304), (305);
insert into @UserSkills
values (1, 149), (1, 305), (2, 148), (2, 149);
select u.Id, u.Name
from @Users as u
inner join @UserSkills as us on u.Id = us.UserId
where us.SkillId in (149, 305)
group by u.Id, u.Name
having count(*) = 2
如果用户有 40 列,有没有办法不枚举 Select 和 Group By 中的所有列,因为 Id 是唯一需要分组的列?
【问题讨论】:
-
您通常 GROUP BY 与您选择的列相同,但那些作为设置函数的参数的列除外。
-
向我们展示一些示例表数据和预期结果 - minimal reproducible example。
-
@jarlh 我刚刚添加了一个更新了这样的代码
标签: sql sql-server tsql