产品销售分析一:取每笔销售的产品名
LeetCode 1068 · JOIN 维表
面试怎么回答
销售表 JOIN 产品表按 product_id 取名称即可。我会根据业务决定用 INNER 还是 LEFT JOIN:要保证每笔销售都出现,就以销售表为左表做 LEFT JOIN。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
销售表记录每笔销售的产品 ID、年份、数量和单价,产品表记录产品名称。输出每笔销售对应的产品名称、年份和单价。
表结构
- Sales:sale_id、product_id、year、quantity、price;(sale_id, year) 为主键
- Product:product_id(主键)、product_name
思路
以销售表为主,关联产品表取名称。题目保证销售里的产品都存在,INNER JOIN 和 LEFT JOIN 结果一样;业务上如果担心产品被删,用 LEFT JOIN 可以保留销售记录。
参考解法
select product_name,year,price
from Sales s left join Product p
on s.product_id = p.product_id
易错点
- 反过来以产品表为主 LEFT JOIN 销售表,会多出没有销售记录的产品(年份和价格为空)。