mysql - Mysql 中的 NOT IN 不返回所需的值 - 包含子查询

标签 mysql sql phpmyadmin prestashop prestashop-1.6

我得到了这个表:仓库,员工

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/

相关文章:

php - 如何在mysql中存储阿拉伯字体

sql - 对 sql 中两个不同表的两个计数求和

mysql - 为什么我的查询结果页面这么慢,而查询本身却很快

mysql - 为phpmyadmin添加密码,无需添加root密码

mysql - 多系列(列)MySQL 查询无法正确汇总

html - Perl - 将用户输入的 cgi 表单数据传递给 perl 程序,然后将其放入 mysql 数据库

php - 在不加载页面的情况下对图像执行 PHP 函数 onClick

mysql - 对于 MySQL Workbench 中的数据库,有没有办法获取创建数据库当前状态所需的脚本?

sql - Select SQL语句无法读取最新的用户输入

MySql 自动递增停在 255