У меня есть следующая база данных: . Следующий запрос вычисляет общую сумму, которая исходит из умножения цен на продукты и соответствующего количества, из заказов, для которых поле суммы равно NULL:
SELECT SUM(i.qtde * p.preco_unitario) FROM Produtos p
INNER JOIN ItensPedido i ON i.id_produto = p.id_produto
INNER JOIN Pedidos pd ON pd.id_pedido = i.id_pedido
WHERE pd.vlr_total IS NULL
GROUP BY i.id_pedido);
Я могу обновить строку в таблице Pedidos, используя следующий запрос:
UPDATE Pedidos p
SET p.vlr_total = (SELECT SUM(i.qtde * p.preco_unitario) FROM Produtos p
INNER JOIN ItensPedido i ON i.id_produto = p.id_produto
WHERE i.id_pedido = 1
GROUP BY i.id_pedido)
WHERE p.id_pedido = 1;
Но мне нужно повторно запустить этот запрос для каждой строки, которую я хочу обновить, изменив два предложения WHERE.
Мне нужна помощь в создании запроса, который обновляет все реестры с суммой NULL, используя один запрос (если это возможно), аналогичный второму. Моя попытка использования первого запроса в качестве подзапроса дает ошибку 1093: использование той же целевой таблицы в обновлении в подзапросе.
Вы должны это сделать, изменив эту строку в вашем подзапросе, и это приведет к тому, что предложение подпрограммы WHERE будет соответствовать вашим записям во внешней таблице.
WHERE i.id_pedido = 1
К
WHERE i.id_pedido = p.id_pedido
Затем вы можете удалить внешний WHERE, если вы действительно не хотите просто ограничивать его p.id_pedido = 1