选择所有产品并有条件地更改字段

时间:2017-06-28 13:32:27

标签: mysql

我正在使用此查询从库存表中选择我的产品:

   SELECT s.ProductCode,s.stock,s.default_sales_cost,s.nextstockdate,cp.price custom_price FROM standsafe.stock s
join custom_prices cp on cp.productcode = s.ProductCode
where cp.customerid = 'A4909984'

库存表有一个“default_sales_cost”列,它是产品的成本。

我想选择所有股票,但如果custom_price表中有一个条目(目前客户A4909984有一个),我希望价格是自定义价格表中的价格,而不是有货。 (基本上如果自定义价格表中有一个条目,那么它应该覆盖股票价格)。

目前我查询的唯一结果是一个股票入场因为我认为加入不正确,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

使用CASE表达式,如

case when cp.default_sales_cost is not null then cp.default_sales_cost else s.default_sales_cost end

(或)更好地使用COALESCE()之类的

COALESCE(cp.default_sales_cost, s.default_sales_cost)

答案 1 :(得分:0)

您正在寻找COALESCE。联接必须是外部联接,因此无论是否存在custom_prices记录,您都可以获得该产品。

SELECT 
  s.ProductCode,
  s.stock,
  COALESCE(cp.price, s.default_sales_cost) as cost,
  s.nextstockdate
FROM standsafe.stock s
LEFT OUTER JOIN custom_prices cp ON  cp.productcode = s.productcode
                                 AND cp.customerid = 'A4909984';