我正在使用此查询从库存表中选择我的产品:
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有一个),我希望价格是自定义价格表中的价格,而不是有货。 (基本上如果自定义价格表中有一个条目,那么它应该覆盖股票价格)。
目前我查询的唯一结果是一个股票入场因为我认为加入不正确,有人可以帮忙吗?
答案 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';