以下声明将查找所有没有订单或有订单的客户


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 NULLNULL通常表示"丢失"或"未知"。加上SELECT 1更容易打字。但是,EXISTS正在检查是否存在,因此该值无关紧要

相关内容

  • 没有找到相关文章

最新更新