У меня есть 3 таблицы (упрощенный):SQL Server с внутренним соединением
tblOrder(OrderId INT)
tblVariety(VarietyId INT,Stock INT)
tblOrderItem(OrderId,VarietyId,Quantity INT)
Если я размещаю заказ, я не уронить уровень запасов с помощью этого:
UPDATE tblVariety
SET tblVariety.Stock = tblVariety.Stock - tblOrderItem.Quantity
FROM tblVariety
INNER JOIN tblOrderItem ON tblVariety.VarietyId = tblOrderItem.VarietyId
INNER JOIN tblOrder ON tblOrderItem.OrderId = tblOrder.OrderId
WHERE tblOrder.OrderId = 1
Все нормально, до тех пор, являются двумя строками в tblOrderItem с тем же VarietyId для того же OrderId. В этом случае для обновления запасов используется только одна из строк. Кажется, что-то делает GROUP BY VarietyId.
Может ли кто-нибудь пролить свет? Большое спасибо.
Если это невозможно, чтобы иметь такую же комбинацию Variety/Order? То есть, если одно и то же Variety появляется> 1 для заказа, то это фиксируется в столбце Количество, а не в нескольких строках? – gbn
Технически, да. Но есть и другие столбцы в tblOrderItem, что означает, что более чем одна строка может содержать те же базовые номера (например, поле даты) – Geoff