我们需要根据“产品”表中的产品ID更新“订单”表中的价格值。这很简单:
update o
set o.price = p.price
from Orders o
inner join Products p
on o.productid = p.productid
然后要问的是,根据先前查询未更新的订单的不同列(orderpricingid),从不同表(OrderPricing)更新价格。
所以我还有另一条更新声明:
update o
set o.price = op.price
from Orders o
inner join OrderPricing op
on o.orderpricingid = p.orderpricingid
where o.price is null
所以我的问题是-两个更新语句可以组合在一起吗?有没有一种方法可以根据上一个更新查询的结果进行更新?
答案 0 :(得分:0)
您可以尝试以这种方式,就像o.price为null一样,您将从订单价格进行更新,因此我们可以在更新时使用case when
update o
set o.price= case when p.price is null then op.price else p.price end
from Orders o
inner join Products p
on o.productid = p.productid
inner join OrderPricing op
on o.orderpricingid = p.orderpricingid
答案 1 :(得分:0)
如果使用inner
将联接从left
更改为coalesce
,则可以在同一查询中同时执行这两个操作:
update o
set o.price = coalesce(p.price, op.price, o.price)
from Orders o
left join Products p on o.productid = p.productid
left join OrderPricing op on o.orderpricingid = p.orderpricingid
如果产品存在,这将更新products
表中的价格,如果不存在,它将使用OrderPricing
表中的价格,但是如果该价格也不存在,它将只是保持原始价格。
答案 2 :(得分:0)
我相信您需要left join
:
update o
set o.price = coalesce(p.price, op.price)
from Orders o left join
Products p
on o.productid = p.productid left join
OrderPricing op
on o.orderpricingid = p.orderpricingid;