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)
。
我得到这个 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)
。