1045. 买下所有产品的客户

发布时间 2023-06-30 13:17:38作者: HHHuskie

1045. 买下所有产品的客户

Customer 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| customer_id | int     |
| product_key | int     |
+-------------+---------+
product_key 是 Customer 表的外键

Product 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_key | int     |
+-------------+---------+
product_key 是这张表的主键。

 

写一条 SQL 查询语句,从 Customer 表中查询购买了 Product 表中所有产品的客户的 id。

示例:

Customer 表:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1           | 5           |
| 2           | 6           |
| 3           | 5           |
| 3           | 6           |
| 1           | 6           |
+-------------+-------------+

Product 表:
+-------------+
| product_key |
+-------------+
| 5           |
| 6           |
+-------------+

Result 表:
+-------------+
| customer_id |
+-------------+
| 1           |
| 3           |
+-------------+
购买了所有产品(5 和 6)的客户的 id 是 1 和 3 。
# 1.以Product为主表创建连接Customer,获取distinct的customer_id
# 2.以customer_id分组,再通过having COUNT(*)=(SELECT COUNT(*) FROM Product)判断

SELECT customer_id 
FROM (
  -- 应该是右连接,因为要确保顾客买的产品在产品表
    SELECT distinct customer_id,c.product_key 
    FROM Customer c
    RIGHT JOIN Product p 
    ON c.product_key=p.product_key
) AS T
GROUP BY customer_id 
having COUNT(*)=(SELECT COUNT(*) FROM Product)