我得到了这个表:仓库,员工
Employee:创建了 5 个员工,有 id_employee、firstname、lastname 等。
仓库:(括号内,每行值)
第 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- 查询。我想接收所有这些未连接到仓库的员工...请帮忙...有什么问题?员工表没有问题,我很确定。
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
对于子查询是危险的。如果子查询中即使有一个值返回 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)
上有索引。
关于mysql - Mysql 中的 NOT IN 不返回所需的值 - 包含子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200955/