在安全更新模式下使用子查询进行MySQL更新

时间:2017-12-11 21:00:38

标签: mysql sql database

我有以下数据库: Database model 以下查询计算总金额,该金额来自将产品价格与相应购买数量相乘,其金额字段等于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错误:在子查询中使用更新中的相同目标表。

1 个答案:

答案 0 :(得分:1)

您应该可以通过更改子查询中的这一行来实现这一点,这将设置子查询WHERE子句以匹配外部表中的记录。

WHERE i.id_pedido = p.id_pedido

Start Date

然后你可以删除外部WHERE,除非你真的想把它限制为p.id_pedido = 1