【问题标题】:How can I perform this sql update using sql instead of using code?如何使用 sql 而不是使用代码执行此 sql 更新?
【发布时间】:2021-03-08 16:49:21
【问题描述】:

我已经能够选择这个数据,使用这两个 sql 查询

查询 1:

SELECT article_id, amount_required, amount_sold FROM products_articles,sales WHERE sales.product_id = products_articles.product_id

查询 2:

SELECT * FROM articles

我想要做的是浏览第一个表(包含已售出的金额和所需的金额)(可以有重复的行),并且对于表中的每一行,将 amount_sold 和 amount_required 的值相乘,然后减去来自第二个表中 id 匹配的 amount_in_stock 的值。

第一行的示例: 2 * 4 = 8,将 amount_in_stock 从 124 更改为 116。 等等……

我怎样才能只使用 sql 来做到这一点?

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 在哪里存储新值?
  • 我已经使用 javascript 完成了这项工作 - foreach 列表中的项目,将这两个值相乘,然后循环遍历文章表 - 如果 id 匹配,则我从原始值中减去该值。因此,这不是存储新值,而是更新文章表中的 amount_in_stock 值

标签: sql phpmyadmin


【解决方案1】:
UPDATE A
SET 
    A.amount_in_stock =(S.amountSold * S.amount_required)- A.amount_in_stock 
FROM articles AS A
INNER JOIN
products_articles AS PA
ON PA.article_id= A.article_id
INNER JOIN  Sales AS S 
ON S.product_id=PA.product_id

【讨论】:

    【解决方案2】:

    请试试这个:

    Update articles a
    inner join 
    (
    SELECT article_id, sum(amount_required) amount_required, sum(amount_sold )amount_sold FROM products_articles inner join sales on sales.product_id = products_articles.product_id
    group by article_id
    )b on a.article_id=b.article_id
    set a.amount_in_stock=a.amount_in_stock-(amount_required*amount_sold )
    

    由于 product_articles 和 amount_sold 中可能有多行,我使用 group by 对金额求和。

    对于 SQLite,请尝试以下操作:

    Update articles 
    set amount_in_stock=(SELECT  sum(amount_required) * sum(amount_sold )  FROM products_articles inner join sales on sales.product_id = products_articles.product_id
    where products_articles.article_id=articles.article_id
    group by article_id
    )
    where exists (SELECT  *  FROM products_articles inner join sales on sales.product_id = products_articles.product_id where products_articles.article_id=articles.article_id
    )
    

    【讨论】:

    • @Yonder 您在使用此查询时是否遇到任何困难?
    • 这非常有效(对于 mariadb),谢谢,这是一个很好的解决方案,并且易于理解。然后我不得不让它适用于 sqlite,我被困在那个更新上,并且内部连接在那里不起作用
    • 你还在坚持使用 sqlite 吗?请告诉我?请在问题中添加 SQLite 标记。
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多