SELECT
name
FROM
customers
WHERE
NOT EXISTS (
SELECT
NULL
FROM
orders
WHERE
orders.customer_id = customers.customer_id
)
ORDER BY
name;
如果你能告诉我如何使用不存在并选择null?
not exists
条件确保orders
表中没有对应customer_id
的记录。
此查询为您提供所有没有订单的客户。
not exists
条件下的子查询返回什么并不重要:not exists
的目的是检查子查询是否返回一些。一个常见的约定是使用select 1
,但它实际上可能是任何东西。
您的查询看起来不错。我会这样写:
SELECT c.name
FROM customers c
WHERE NOT EXISTS (SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
)
ORDER BY c.name;
注:
- 这相当于您的查询
- 这使用了表别名,我建议这样做
- 我只是不喜欢
SELECT NULL
。NULL
通常表示"丢失"或"未知"。加上SELECT 1
更容易打字。但是,EXISTS
正在检查是否存在行,因此该值无关紧要