我需要根据这些条件更新产品的UnitinStockShipped Date


Shipped date is null
Quantity < Unit in stock时。


但是我的查询正在更新Shipped date的订单,其中Shipped date is null e但不满足Quantity < Unit in stock。就像这样,即使Quantity > Unit in stock,它也会将空值更新为当前日期。

如何满足这两个条件并更新列:

update products,orderdetails,orders
set
    products.UnitsInStock = (products.UnitsInStock - orderdetails.Quantity),
    ShippedDate = current_date()
where
    products.ProductID = orderdetails .ProductID
    and orders.OrderID = orderdetails.OrderID
    and (ShippedDate is null and orderdetails.Quantity < UnitsInStock)
    and  orders.OrderID = 11039

最佳答案

我认为您的逻辑还可以。我不太了解数据模型-例如,为什么ShippedDateproducts中而不在orderdetails中。但是,这就是查询指定的内容。

我观察到您不需要查询的orders表。这样就可以简化查询。您还可以使用显式join和表别名,这样更易​​读:

update products p join
       orderdetails od
       on p.ProductID = od.ProductID
    set p.UnitsInStock = (p.UnitsInStock - od.Quantity),
        p.ShippedDate = current_date()
where p.ShippedDate is null and
      od.Quantity < p.UnitsInStock and
      od.OrderID = 11039;

10-08 18:49