Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中,如何仅从一个表中获取不链接到另一个表中具有特定ID的任何行的行_Mysql_Sql - Fatal编程技术网

在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;