【问题标题】:How to set the value of a column in a table as the product of two values from different tables如何将表中列的值设置为来自不同表的两个值的乘积
【发布时间】:2020-01-23 13:25:58
【问题描述】:

我在两个不同的表产品和订单中有两列价格和数量。我想将订单中列的值设置为价格*数量。 我尝试了以下查询,但没有运气

update orders_
set amount = (select price*quantity
              from product,
                   orders_
              where product.productid = orders_.productid);

productid 是两个表之间的公共链接 我不断收到以下错误:

ERROR 1093 (HY000): 你不能指定目标表'orders_' 在 FROM 子句中更新

【问题讨论】:

  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束和索引以及表格格式的基表初始化。 PS你有一个语法错误。阅读语法和手册。
  • 这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com 和标签,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS 请在发帖前查看编辑框下方帖子的格式化版本。阅读代码和引文的内联和块格式的编辑帮助。
  • 您不应该像这样存储从其他列计算的值,您知道数据不一致。相反,创建一个视图将始终具有最新值。 (或者至少使用触发器。)

标签: mysql sql mysql-8.0


【解决方案1】:

我相信你想要:

update orders_ o join
       product p
       using (productid)
    set amount = (p.price * o.quantity);

【讨论】:

    【解决方案2】:

    您可以使用仅加入更新查询。

    Update orders o, product p
    SET amount = pricequantity
    WHERE p.productid=o.productid;
    

    【讨论】:

      【解决方案3】:

      您可以在下面尝试 - 使用 JOIN

      UPDATE orders_
              INNER JOIN
          product ON product.productid=orders_.productid 
      set amount=pricequantity 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-25
        • 2014-07-08
        • 2021-08-01
        • 1970-01-01
        • 2023-01-18
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多