MySQL 查询不返回所需的结果。没有任何订单的客户,不显示

标签 mysql sql

我仍在进行 SQL 培训。所以我有两个表 CUSTOMERS 和 ORDERS(外键表)。现在我需要让所有客户都没有任何订单。这是我的查询

select LASTNAME, FIRSTNAME 
  from CUSTOMERS 
  WHERE CUSTOMERS.ID NOT IN 
      (select ID_CUSTOMER from ORDERS);

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ID        | int(11)      | NO   | PRI | NULL    |       |
| FIRSTNAME | varchar(50)  | YES  |     | NULL    |       |
| LASTNAME  | varchar(50)  | YES  |     | NULL    |       |
| ADDRESS   | varchar(100) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+


+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| ID            | int(11)      | NO   | PRI | NULL    |       |
| PRODUCT_NAME  | varchar(100) | YES  |     | NULL    |       |
| PRODUCT_PRICE | double(10,4) | YES  |     | NULL    |       |
| DATE_ORDER    | date         | YES  |     | NULL    |       |
| ID_CUSTOMER   | int(11)      | YES  |     | NULL    |       |
| AMOUNT        | int(11)      | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+

但我确实收到了空集(0,00 秒)/但我确定这些都存在;

最佳答案

我怀疑 ORDERS 表的 ID_CUSTOMER 列中有一些 NULL 值。当子查询中存在 NULL 值时,NOT IN 失败。

使用NOT EXISTS

select LASTNAME, FIRSTNAME 
  from CUSTOMERS C
  WHERE NOT EXISTS (select ID_CUSTOMER from ORDERS O Where C.ID = O.ID_CUSTOMER );

关于MySQL 查询不返回所需的结果。没有任何订单的客户,不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326302/

相关文章:

mysql - 无法向表添加约束

SQL从子查询中获取一列作为逗号分隔值

php - 将特定页面限制为仅在 Codeigniter 中登录的用户的最佳做法是什么?

mysql - 如何创建此权利加入

mysql - 将 MySQL 列别名设置为计算日期

php - 如何在 SQL 查询中通过相似性查找图像?

java - JdbcTemplate 的 SQL DELETE FROM 不起作用

php - 使用 SQL 检索前一天的数据

PHP MySQLi 从外键获取列

MySql:自动填充