Запрос обновляет все строки в таблице - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь обновить количество одного элемента в моей базе данных, но мой запрос обновляет все значения в моем столбце количества.

Как это можно исправить?

Вотмой запрос:

UPDATE Stocks 
SET Stocks.Quantity = Stocks.Quantity - PointofSale.Quantity 
FROM PointofSale 
WHERE ItemID IN (SELECT ItemID FROM Recipe 
                 WHERE MenuID IN (SELECT MenuID FROM Menu 
                                  WHERE ItemName IN (SELECT Product FRPOM PointofSale 
                                                     WHERE POSID > 0)))

А ниже приведены некоторые скриншоты моих таблиц и макета БД.

Это моя Stocks таблица:

Это идентификаторы, которые будут вызываться в моем запросе на обновление:

Это мое меню, которое содержит все продукты:

А это мой POS, в котором есть столбец количества:

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

(слишком долго для комментария)

кусок кода от @Alex ответ с моей запиской из комментария, описанного:

UPDATE s SET 
  Quantity = Quantity - POS.Quantity
FROM Stocks s
INNER JOIN PointofSale AS POS
 ON ???
INNER JOIN Menu AS M
  ON M.ItemName = POS.Product
INNER JOIN Recipe AS R
  ON R.MenuID = M.MenuID
WHERE POS.POSID > 0

Как Stocks должен быть присоединен к любому изэти таблицы?Это причина ваших неприятностей.Каждая строка из Stocks "соответствует" всем строкам из других таблиц, потому что нет условия соответствия на самом деле.Эта ситуация называется MISSING JOIN PREDICATE.

0 голосов
/ 26 августа 2018

Попробуйте этот запрос:

UPDATE Stocks SET Stocks.Quantity = Stocks.Quantity - POS.Quantity
FROM PointofSale AS POS
INNER JOIN Menu AS M
  ON M.ItemName = POS.Product
INNER JOIN Recipe AS R
  ON R.MenuID = M.MenuID
WHERE POS.POSID > 0 AND Stocks.ItemID = R.ItemID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...