Оператор обновления не обновляет правильные значения в базе данных - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно обновить UnitinStock и Shipped Date продуктов на основе этих условий.

  1. Когда Shipped date is null и
  2. Когда Quantity < Unit in stock.

Но мой запрос обновляет Shipped date заказов, где Shipped date is null e, но не удовлетворяет Quantity < Unit in stock.Например, он обновляет нулевые значения до текущей даты, даже если Quantity > Unit in stock

Как мне выполнить эти 2 условия и обновить столбцы:

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

1 Ответ

0 голосов
/ 30 марта 2019

Я думаю, что ваша логика в порядке. Я не очень понимаю модель данных - например, ShippedDate в products, а не orderdetails. Однако это именно то, что указывает запрос.

Я заметил, что вам не нужна таблица orders для запроса. Таким образом, вы можете упростить запрос. Вы также можете использовать явные join s и псевдонимы таблиц, чтобы они были более читабельными:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...