MySQL从不订购的客户

以你之姓@ 2023-10-06 18:50 93阅读 0赞

MySQL从不订购的客户

  • SQL架构
  • 题目描述
  • 题解
    • 方法:使用子查询和 NOT IN 子句

SQL架构

  1. Create table If Not Exists Customers (Id int, Name varchar(255));
  2. Create table If Not Exists Orders (Id int, CustomerId int);
  3. insert into Customers (Id, Name) values ('1', 'Joe');
  4. insert into Customers (Id, Name) values ('2', 'Henry');
  5. insert into Customers (Id, Name) values ('3', 'Sam');
  6. insert into Customers (Id, Name) values ('4', 'Max');
  7. insert into Orders (Id, CustomerId) values ('1', '3');
  8. insert into Orders (Id, CustomerId) values ('2', '1');

题目描述

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

Customers 表:

  1. +----+-------+
  2. | Id | Name |
  3. +----+-------+
  4. | 1 | Joe |
  5. | 2 | Henry |
  6. | 3 | Sam |
  7. | 4 | Max |
  8. +----+-------+

Orders 表:

  1. +----+------------+
  2. | Id | CustomerId |
  3. +----+------------+
  4. | 1 | 3 |
  5. | 2 | 1 |
  6. +----+------------+

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

  1. +-----------+
  2. | Customers |
  3. +-----------+
  4. | Henry |
  5. | Max |
  6. +-----------+

题解

方法:使用子查询和 NOT IN 子句

算法

如果我们有一份曾经订购过的客户名单,就很容易知道谁从未订购过。

我们可以使用下面的代码来获得这样的列表。

  1. select customerid from orders;

然后,我们可以使用 NOT IN 查询不在此列表中的客户。

  1. select Customers.name as 'Customers'
  2. from Customers
  3. where Customers.id not in
  4. (
  5. select CustomerId from Orders
  6. );
  7. +-----------+
  8. | Customers |
  9. +-----------+
  10. | Henry |
  11. | Max |
  12. +-----------+
  13. 2 rows in set (0.00 sec)

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读