在mysql中,如何仅从一个表中获取不链接到另一个表中具有特定ID的任何行的行
我有两个具有以下结构的表(删除了不必要的列) 对于每个在mysql中,如何仅从一个表中获取不链接到另一个表中具有特定ID的任何行的行,mysql,sql,Mysql,Sql,我有两个具有以下结构的表(删除了不必要的列) 对于每个prs\U id 我想要的是所有没有与skill\u id1关联的技能记录的人员记录。 用通俗易懂的英语“我要所有没有x技能的人” 目前,我只能使用以下嵌套的select。但我希望找到一个更快的方法 SELECT * FROM `mod_personnel` WHERE `prs_id` NOT IN ( SELECT `prs_id` FROM `mod_skills` WHERE `skl_id` = 1 ) 使用不存在可能会更快 SE
prs\U id
我想要的是所有没有与skill\u id
1关联的技能记录的人员记录。
用通俗易懂的英语“我要所有没有x技能的人”
目前,我只能使用以下嵌套的select
。但我希望找到一个更快的方法
SELECT * FROM `mod_personnel` WHERE `prs_id` NOT IN (
SELECT `prs_id` FROM `mod_skills` WHERE `skl_id` = 1 )
使用
不存在
可能会更快
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 );
这可能更快:
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;
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;