LeetCode:Database 93.购买了产品 A 和产品 B 却没有购买产品 C 的顾客

Posted Xiao Miao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:Database 93.购买了产品 A 和产品 B 却没有购买产品 C 的顾客相关的知识,希望对你有一定的参考价值。

要求:请你设计 SQL 查询来报告购买了产品 A 和产品 B 却没有购买产品 C 的顾客的 ID 和姓名( customer_id 和 customer_name ),我们将基于此结果为他们推荐产品 C 。

您返回的查询结果需要按照 customer_id 排序。

Customers 表的结构:

+---------------------+---------+
| Column Name         | Type    |
+---------------------+---------+
| customer_id         | int     |
| customer_name       | varchar |
+---------------------+---------+
customer_id 是这张表的主键。
customer_name 是顾客的名称。

Orders 表的结构:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| order_id      | int     |
| customer_id   | int     |
| product_name  | varchar |
+---------------+---------+
order_id 是这张表的主键。
customer_id 是购买了名为 "product_name" 产品顾客的id。

Customers 表:

+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1           | Daniel        |
| 2           | Diana         |
| 3           | Elizabeth     |
| 4           | Jhon          |
+-------------+---------------+

Orders 表:

+------------+--------------+---------------+
| order_id   | customer_id  | product_name  |
+------------+--------------+---------------+
| 10         |     1        |     A         |
| 20         |     1        |     B         |
| 30         |     1        |     D         |
| 40         |     1        |     C         |
| 50         |     2        |     A         |
| 60         |     3        |     A         |
| 70         |     3        |     B         |
| 80         |     3        |     D         |
| 90         |     4        |     C         |
+------------+--------------+---------------+

Result Table:

+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 3           | Elizabeth     |
+-------------+---------------+
只有 customer_id 为 3 的顾客购买了产品 A 和产品 B ,却没有购买产品 C 。

SQL语句:

select distinct a.customer_id,customer_name 
from orders a 
join orders b
on a.product_name='A' and b.product_name='B'
and a.customer_id=b.customer_id
join customers c 
on c.customer_id=a.customer_id
where a.customer_id not in(select customer_id from orders where product_name='C');

以上是关于LeetCode:Database 93.购买了产品 A 和产品 B 却没有购买产品 C 的顾客的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Database 46.销售分析 II

LeetCode:Database 37.买下所有产品的客户

LeetCode 93. 复原IP地址

[JavaScript 刷题] 搜索 - 复原 IP 地址, leetcode 93

[Lintcode]93. Balanced Binary Tree/[Leetcode]

Leetcode 93. Restore IP Addresses