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

MySQL:如何查询未关联skl_id=1技能记录的人员信息?

找出未掌握指定技能的人员解决方案

嘿,这需求太常见了!要找出所有没有skl_id为1的技能记录的人员信息,我给你分享几种实用的SQL写法,你可以根据自己的数据库情况选合适的:

方法一:使用NOT EXISTS(推荐,逻辑清晰且高效)

这种方式是对每个人员做存在性检查,只要他没有对应技能ID=1的记录就被选中,大多数数据库对这种写法的优化都很好:

SELECT p.prs_id, p.name
FROM mod_personnel p
WHERE NOT EXISTS (
    -- 检查当前人员是否有skl_id=1的技能记录
    SELECT 1
    FROM mod_skills s
    WHERE s.prs_id = p.prs_id
      AND s.skl_id = 1
);

方法二:LEFT JOIN + IS NULL

通过左连接把人员表和目标技能记录关联,没有匹配到的人员会返回NULL值,我们只要筛选这些NULL的行就行:

SELECT p.prs_id, p.name
FROM mod_personnel p
LEFT JOIN mod_skills s
    -- 关联条件限定为skl_id=1的技能
    ON p.prs_id = s.prs_id
    AND s.skl_id = 1
-- 没有匹配到对应技能的人员,s.prs_id会是NULL
WHERE s.prs_id IS NULL;

方法三:使用NOT IN(需注意特殊情况)

这种写法看起来简洁,但要小心如果子查询里的prs_id存在NULL值的话,整个查询会返回空结果,所以使用前要确保子查询没有NULL:

SELECT prs_id, name
FROM mod_personnel
WHERE prs_id NOT IN (
    -- 先拿到所有有skl_id=1技能的人员ID
    SELECT prs_id
    FROM mod_skills
    WHERE skl_id = 1
      -- 可选:如果表中可能有NULL,加上这个排除
      AND prs_id IS NOT NULL
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:03