Leetcode No.183 从不订购的客户

    技术2026-03-15  6

    难度:简单

    某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。 Customers 表:

    +----+-------+ | Id | Name | +----+-------+ | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | +----+-------+

    Orders 表:

    +----+------------+ | Id | CustomerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+

    例如给定上述表格,你的查询应返回:

    +-----------+ | Customers | +-----------+ | Henry | | Max | +-----------+

    解答:

    看到两张表且有交叠的属性,第一个想法就是链接两个表,我先尝试了以下查询语句

    SELECT a.id,a.`Name` as Customers,CustomerId from Customers a left join Orders b on a.Id = b.CustomerId

    看到这个结果表之后,就会非常直观的发现,从不订购任何东西的客户就是customerID为null的人,那我们只需要做一个where CustomerId is null的判断就能把Henry和Max筛选出来。 结果表只要人名,所以我们只需select a.`name` as Customers即可 全部sql语句如下:

    SELECT `Name` as Customers from Customers a left join Orders b on a.Id = b.CustomerId where CustomerId is null

    官方题解

    如果我们有一份曾经订购过的客户名单,就很容易知道谁从未订购过。 我们可以使用下面的代码来获得这样的列表。

    select customerid from orders;

    这个结果表是购买过的客户的id。 然后,我们可以使用 NOT IN 查询不在此列表中的客户。

    select customers.name as 'Customers' from customers where customers.id not in ( select customerid from orders )

    作者:LeetCode 链接:https://leetcode-cn.com/problems/customers-who-never-order/solution/cong-bu-ding-gou-de-ke-hu-by-leetcode/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    Processed: 0.014, SQL: 9