某网站包含两个表,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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
