首页 > 解决方案 > 我想更新通过 SELECT 语句返回的表的结果

问题描述

我需要根据计算更新表 (tb_order_line) 和列 (total_vat_sum),其中包含来自同一个表的 2 个值(数量和单位价格)和来自另一个表的第三个值(c.vat)。这是我使用 SELECT 语句尝试的查询,问题是它使用相同的计算总量更新所有行,而不是按应有的方式更新每一行的计算。谢谢你的帮助!

`UPDATE ventas.tb_order_line
    SET total_vat_sum =
        (SELECT SUM(ol.quantity * ol.unit_price * (1+c.vat))
        FROM ventas.tb_order_line AS ol  
        JOIN ventas.tb_product AS p
        ON ol.product_code = p.product_code
        JOIN ventas.tb_subcategory AS s
        ON p.subcategory_code = s.subcategory_code
        JOIN ventas.tb_category AS c
        ON c.category_code = s.category_code
);`

tb_product

tb_product

tb_order_line

tb_order_line

标签: postgresql

解决方案


FROM ventas.tb_order_line AS ol对于每个更新的行,从该表中选择每一行。相反,您需要对更新的行进行联接:

UPDATE ventas.tb_order_line ol
--                          ^^
SET total_vat_sum = (
    SELECT SUM(ol.quantity * ol.unit_price * (1+c.vat))
    FROM ventas.tb_category AS c
    JOIN ventas.tb_subcategory AS s ON  ON c.category_code = s.category_code
    JOIN ventas.tb_product AS p ON s.subcategory_code = p.subcategory_code
    WHERE p.product_code = ol.product_code
);

推荐阅读