根据先前更新语句的结果进行更新

时间:2018-07-26 06:54:23

标签: sql sql-server

我们需要根据“产品”表中的产品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

所以我的问题是-两个更新语句可以组合在一起吗?有没有一种方法可以根据上一个更新查询的结果进行更新?

3 个答案:

答案 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;