gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:29:03 24 4
gpt4 key购买 nike

我有以下数据库: 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 错误:在子查询的更新中使用相同的目标表。

最佳答案

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

WHERE i.id_pedido = 1

WHERE i.id_pedido = p.id_pedido

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

关于MySQL 在安全更新模式下使用子查询进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47761316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com