使用JOIN获取最低值失败:如何查询id=1的商品最低售价?
获取指定商品的最低价格实现方案
要获取info表中id=1的商品对应的最低在售价格,可通过关联两张数据表并使用聚合函数实现,以下是两种可行的SQL方案:
方案一:关联后直接聚合
SELECT i.id, i.name, MIN(s.price) AS price FROM info i JOIN sell_info s ON i.id = s.product_id WHERE i.id = 1 GROUP BY i.id, i.name;
语句说明:
- 使用
JOIN关联info(别名i)和sell_info(别名s),关联条件为商品id与在售记录的product_id匹配 WHERE i.id = 1精准筛选目标商品MIN(s.price)计算该商品的最低在售价格GROUP BY i.id, i.name确保按商品维度聚合,返回单条商品记录及对应最低价格
方案二:子查询预计算最低价格
SELECT i.id, i.name, s_min.min_price AS price FROM info i JOIN ( SELECT product_id, MIN(price) AS min_price FROM sell_info WHERE product_id = 1 GROUP BY product_id ) s_min ON i.id = s_min.product_id WHERE i.id = 1;
语句说明:
- 子查询先针对
product_id=1的在售记录计算最低价格,缩小数据处理范围 - 再将子查询结果与
info表关联,获取商品的基本信息 - 该方案在数据量较大时性能更优,避免全表关联计算
预期执行结果
| id | name | price |
|---|---|---|
| 1 | ABC | 3 |
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

