You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询agentskills表中拥有指定skillid组合的skilluserid?

查询拥有指定技能组合的用户ID

针对你提出的需求——找出同时拥有指定skillid组合(比如21和22,或包含这两者的更多技能)的skilluserid,我整理了几种实用的SQL查询方案,适合不同场景:

方法一:GROUP BY + HAVING(最常用)

这是处理这类“多条件匹配”需求的经典方法,逻辑清晰且效率不错:

SELECT skilluserid
FROM agentskills
WHERE skillid IN (21, 22) -- 指定需要匹配的技能ID列表
GROUP BY skilluserid
HAVING COUNT(DISTINCT skillid) = 2; -- 匹配的技能数量要等于需求的数量

说明:

  • WHERE skillid IN (21,22)先筛选出所有和目标技能相关的记录
  • GROUP BY skilluserid按用户分组,统计每个用户匹配到的技能数
  • COUNT(DISTINCT skillid)是为了避免同一个用户重复添加同一技能的情况(如果你的表保证skilluserid+skillid是唯一组合,也可以去掉DISTINCT)
  • 如果需要匹配更多技能(比如21、22、23),只需要把IN列表改成(21,22,23),HAVING的数字改成3即可

方法二:自连接(适合少量技能的场景)

如果需要匹配的技能数量不多,用自连接也很直观:

SELECT DISTINCT a.skilluserid
FROM agentskills a
JOIN agentskills b ON a.skilluserid = b.skilluserid
WHERE a.skillid = 21 AND b.skillid = 22;

说明:

  • 将表和自身连接,找到同一个用户同时拥有21和22技能的记录
  • DISTINCT用来去除重复的用户ID结果

方法三:EXISTS子查询(扩展性强)

如果后续需要添加更多技能条件,这种方法的扩展性最好,新增条件只需要加一个EXISTS即可:

SELECT DISTINCT skilluserid
FROM agentskills a
WHERE EXISTS (
    SELECT 1
    FROM agentskills b
    WHERE b.skilluserid = a.skilluserid AND b.skillid = 21
)
AND EXISTS (
    SELECT 1
    FROM agentskills c
    WHERE c.skilluserid = a.skilluserid AND c.skillid = 22
);

说明:

  • 每个EXISTS子句单独检查用户是否拥有某一项技能,只有所有条件都满足的用户才会被返回
  • 要匹配更多技能的话,继续追加AND EXISTS (...)块即可

内容的提问来源于stack exchange,提问作者kr153

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:02:27