我有两个具有以下结构的表(去掉了不必要的列)
----------------- ---------------------
| mod_personnel | | mod_skills |
| | | |
| - prs_id | | - prs_id |
| - name | | - skl_id |
----------------- | |
---------------------
对于每个prs_id
,skills
表中可能有0到多行
我想要的是所有与skill_id
1没有关联技能记录的人员记录。简单地说,“我想要所有没有技能x的人”。
目前,我只能使用下面的嵌套select
来完成此操作。但我希望能找到一种更快的方法。
SELECT * FROM `mod_personnel` WHERE `prs_id` NOT IN (
SELECT `prs_id` FROM `mod_skills` WHERE `skl_id` = 1 )
发布于 2018-04-27 10:33:44
这可能会更快:
SELECT `mod_personnel`.*
FROM `mod_personnel`
left outer join `mod_skills`
on `mod_skills`.`prs_id` = `mod_personnel`.`prs_id`
and `mod_skills`.`skl_id` = 1
WHERE `mod_skills`.`prs_id` is null;
发布于 2018-04-27 05:37:39
使用NOT EXISTS
可能会更快。
SELECT *
FROM `mod_personnel` p
WHERE NOT EXISTS (SELECT *
FROM `mod_skills` s
WHERE s.`prs_id` = p.`prs_id`
AND s.`skl_id` = 1 );
https://stackoverflow.com/questions/50052129
复制相似问题