我得到了这个表: 仓库, 员工
员工:创建 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-Query。我想接收所有这些未连接到仓库的员工......请帮忙...有什么不好的?员工表没有问题,我很确定。
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)
.