sql - 获取具有列组合的记录
问题描述
这是我的示例表
CREATE TABLE agentskills
(
id INT PRIMARY KEY NOT NULL IDENTITY,
skilluserid INT,
skillid INT NOT NULL,
skilltypeid INT,
priority INT DEFAULT 0
)
这些是我的样本数据
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (1,21,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (1,22,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (2,23,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (2,24,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (3,21,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (3,22,1,1)
这里,“skilluserid”是具有技能“skillid”的用户的 ID
我如何获取具有组合的用户/技能用户 ID Skillid ?
例如:获取具有技能 ID 21 和 22 或 22 和 21 或 21、22、23 的用户。具有 21 和 22 的任意组合。
解决方案
您可以使用聚合和having
:
select skilluserid
from agentskills
where skillid in (21, 22)
group by skilluserid
having count(distinct skillid) = 2; -- "2" = size of list in where clause
推荐阅读
- firebase - 是否有云功能触发数据库更改并向用户订阅“主题”发送通知
- javascript - 如何在单页应用程序中触发 url 更改
- c - fgets() + sscanf() 如何写入大于其大小的数组?
- python - keras imagedatagenerator 不使用部分批处理
- postgresql-9.6 - centos7上如何删除postgresql9.6数据库?
- javascript - 在tomcat上部署spring boot应用程序时成功函数(javascript)的问题
- c# - 如何将扩展方法添加到自定义对象列表以将它们转换为新列表
- php - 本地主机:8000 不工作。它只是无限加载?
- javascript - AJAX POST 请求中的“未定义索引”错误,因为 $_POST 为空
- docker - 如何从现有 AMI 创建 docker 镜像