如何通过SQL查询用表B修正价格覆盖表A列值生成结果表
实现商品价格优先取修正值的查询
表结构说明
- 表A(商品基础价格表):
item | price ------------- book | 20 copy | 30 pen | 10 apple| 5
- 表B(价格修正表):
item | price ------------- copy | 55 apple| 3 towel| 13
查询SQL语句
要获取表A所有商品,优先使用表B的修正价格,无修正则保留表A原价格,可以用左连接结合COALESCE函数实现:
SELECT a.item, COALESCE(b.price, a.price) AS updated_price FROM 表A a LEFT JOIN 表B b ON a.item = b.item;
逻辑说明
LEFT JOIN确保保留表A的所有商品记录,即使表B中没有对应商品的修正信息COALESCE函数会依次取参数中的非空值:如果表B中存在对应商品的价格,则取b.price;否则取表A的原价格a.price
查询结果
执行上述语句后,将得到期望的结果表C:
item | updated_price ------------- book | 20 copy | 55 pen | 10 apple| 3
内容的提问来源于stack exchange,提问作者Joris Kinable
相关产品推荐
相关产品推荐

