#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня возникли проблемы с созданием инструкции SQL, которая будет обновлять таблицу запасов каждый раз, когда я добавляю заказ в таблицу заказов с помощью кнопки.
Таблица заказов
ID | orderid | разнообразие | вес | Количество | Цена |
---|---|---|---|---|---|
1 | J1 | Родной цыпленок | 1.6 | 10 | 120 |
2 | J2 | Цыпленок-бройлер | 2.3 | 5 | 100 |
3 | J3 | Утка | 1.6 | 2 | 250 |
4 | J4 | Турция | 1.6 | 4 | 350 |
Таблица запасов
ID | разнообразие | вес | Количество | Цена |
---|---|---|---|---|
11 | Родной цыпленок | 1.6 | 20 | 120 |
12 | Цыпленок-бройлер | 2.3 | 15 | 100 |
13 | Утка | 1.6 | 5 | 250 |
14 | Турция | 1.6 | 9 | 350 |
15 | Родной цыпленок | 1.9 | 20 | 120 |
16 | Цыпленок-бройлер | 2.5 | 15 | 100 |
17 | Утка | 1.7 | 5 | 250 |
18 | Турция | 4.7 | 9 | 350 |
Ожидаемый результат
ID | разнообразие | вес | Количество | Цена |
---|---|---|---|---|
11 | Родной цыпленок | 1.6 | 10 | 120 |
12 | Цыпленок-бройлер | 2.3 | 10 | 100 |
13 | Утка | 1.6 | 3 | 250 |
14 | Турция | 1.6 | 5 | 350 |
15 | Родной цыпленок | 1.9 | 20 | 120 |
16 | Цыпленок-бройлер | 2.5 | 15 | 100 |
17 | Утка | 1.7 | 5 | 250 |
18 | Турция | 4.7 | 9 | 350 |
это код, который я пытаюсь использовать с помощью запроса в Visual Studio, и каждый раз, когда я его запускаю, количество продолжает уменьшаться.
UPDATE Inventory
SET Quantity = TableA.Quantity - TableB.Quantity
FROM Inventory AS TableA JOIN tblOrders AS TableB ON TableA.Variety = TableB.Variety
WHERE
TableA.Variety = TableB.Variety
AND
TableB.Weight = TableB.Weight
Комментарии:
1. Какую СУБД вы используете? (ОБНОВЛЕНИЕ синтаксиса зависит от продукта.)
2. @jarlh, я использую SQL Server для этого.
Ответ №1:
В стандартном SQL вы можете использовать:
update inventory
set quantity = quantity -
(select sum(o.quantity)
from orders o
where o.variety = inventory.quality and
o.weight = inventory.weight
)
where exists (select 1
from orders o
where o.variety = inventory.quality and
o.weight = inventory.weight
);
Многие базы данных имеют более сжатые способы выражения этой логики. Но в вашем вопросе не указана конкретная база данных.
Например, в SQL Server вы можете использовать:
update i
set quantity = i.quantity - o.quantity
from inventory i join
(select o.variety, o.weight, sum(quantity) as quantity
from orders o
group by o.variety, o.weight
) o
on o.variety = inventory.quality and
o.weight = inventory.weight
Комментарии:
1. Я получаю эту ошибку с многосоставным идентификатором «tblOrders.Variety», «tblOrders. Вес», «Запасы.Количество», «Запасы. Не удалось привязать «Вес». `
2. @alexatorrento . , , Вам нужно ввести в запрос фактические имена таблиц. Идентификаторы в этом ответе основаны на вашем вопросе .
3. я ввел имена таблиц, но это ошибка, которую я получаю: (