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

如何查询满足指定课程全部资质要求的可用培训师

问题:筛选具备课程全部资质要求的培训师

需求说明

给定CourseID,列出所有具备该课程全部QID资质的培训师。此前尝试多种SQL连接方式仅能得到资质任意匹配的结果,无法实现全部匹配过滤。

示例数据表

TrainerQuals(培训师资质表)

TrainerIDQID
11
22
31
32

CourseRequiredQuals(课程要求资质表)

CourseIDQID
11
22
31
32

预期输出

  • 当@courseid = 1时,输出TrainerID:1、3;
  • 当@courseid = 2时,输出TrainerID:2、3;
  • 当@courseid = 3时,输出TrainerID:3。

解决方案

要实现全部资质匹配,核心是验证培训师的资质完全覆盖课程要求的所有资质,以下是两种高效实现方式:

方式一:分组统计匹配数量

通过关联培训师资质与课程要求资质,分组后对比培训师匹配的资质数量和课程所需资质的总数量,相等则说明完全覆盖:

DECLARE @courseid INT = 3; -- 替换为目标CourseID

SELECT tq.TrainerID
FROM TrainerQuals tq
JOIN CourseRequiredQuals crq 
    ON tq.QID = crq.QID
WHERE crq.CourseID = @courseid
GROUP BY tq.TrainerID
HAVING COUNT(DISTINCT tq.QID) = (
    SELECT COUNT(DISTINCT QID) 
    FROM CourseRequiredQuals 
    WHERE CourseID = @courseid
);

方式二:排除法筛选

利用双重NOT EXISTS,排除那些缺少至少一项课程要求资质的培训师,剩余的即为符合要求的:

DECLARE @courseid INT = 3; -- 替换为目标CourseID

SELECT DISTINCT tq.TrainerID
FROM TrainerQuals tq
WHERE NOT EXISTS (
    SELECT 1
    FROM CourseRequiredQuals crq
    WHERE crq.CourseID = @courseid
    AND NOT EXISTS (
        SELECT 1
        FROM TrainerQuals tq_inner
        WHERE tq_inner.TrainerID = tq.TrainerID
        AND tq_inner.QID = crq.QID
    )
);

补充说明

  • 两种方式都能处理课程存在重复QID的情况(通过DISTINCT去重);
  • 方式一适合对性能要求较高的场景,方式二逻辑更直观,便于理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:15:35