我仍在进行 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/