Mysql 中的 NOT IN 不需要 returns 值 - 包含子查询

NOT IN in Mysql doesn't returns needed values - Subquery included

我得到这个 tables: 仓库,员工

员工: 创建了 5 名员工,其中 id_employee、名字、姓氏等

仓库: (括号内为每行值)

第 1 行:id_warehouse (1) - id_employee (1)

第 2 行:id_warehouse (2) - id_employee (2)

第 3 行:id_warehouse (3) - id_employee (2)

第 4 行:id_warehouse (4) - id_employee (2)

我知道了 MySQL-Phpmyadmin- 查询。我想接收所有这些未连接到仓库的员工...请帮忙...有什么问题? 员工 table 没有问题,我很确定。

SELECT de.id_employee, CONCAT(de.lastname,' ',de.firstname) as name 
FROM employee de
WHERE de.id_employee NOT IN (SELECT id_employee FROM warehouse GROUP BY id_employee)

问题是,执行此操作后,我收到 0 或没有值,没有员工,但我必须收到员工 3、4 和 5。

NOT IN 对于子查询是危险的。如果子查询中只有一个值 returns NULL,则不会返回任何行。

因此,我强烈建议改用 NOT EXISTS。因此,将您的查询表述为:

SELECT de.id_employee, CONCAT(de.lastname,' ',de.firstname) as name 
FROM employee de
WHERE NOT EXISTS (SELECT 1
                  FROM warehouse w
                  WHERE de.id_employee = w.id_employee
                 );

另一个优点是这会有更好的性能,特别是如果你有索引 warehouse(id_employee)