【问题标题】:How can I join three separated UPDATE statements?如何加入三个单独的 UPDATE 语句?
【发布时间】:2016-09-22 08:44:06
【问题描述】:

我有三个单独的查询。我可以混合它们并创建一个查询而不是这三个查询吗?

查询1:

UPDATE users SET reputation = reputation + 15, 
                 money = money + (SELECT SUM(responder_amount) 
                                    FROM money WHERE post_id = :post_id AND paid IS NULL)
 WHERE id = :Responder

查询2:

UPDATE users SET reputation = reputation + 2,
                 money = money + (SELECT SUM(op_amount) 
                                    FROM money WHERE post_id = :post_id AND paid IS NULL)
 WHERE id = :OP

查询3:

UPDATE money SET paid = 1 WHERE post_id = :post_id

我可以用这三个查询组成一个查询吗?

【问题讨论】:

  • 不,您不能在单个 sql 语句中更新多个表。您也许可以将前两个查询重写为单个语句,但我怀疑它会更有效。
  • @sgeddes 啊,我明白了.. 但是我在某处读到JOIN 可以更新多个表。我不知道怎么回事,我只是听说过。
  • @sgeddes 这不是真的,mysql 支持多表更新语法。但是,由于 sum() 函数,我不确定您是否可以在这里使用它。这些语句应该是事务的一部分。
  • @Shadow,谢谢——我没有查看标记的数据库。你是绝对正确的:stackoverflow.com/a/9417254/1073631
  • 根据现有信息,无法判断您是否可以将这 3 个语句合二为一。 sum()函数的使用说明money表中可能有多条post_id相同的记录。 money 和 users 表之间的关系也是未知的。即使这 3 个语句可以合并为一个,我也不确定我是否花时间解决这个问题。我会简单地将这 3 个语句封装到一个事务中。这样,所有 3 个语句要么一起成功,要么一起失败。

标签: mysql sql join sql-update


【解决方案1】:

如果您要更新同一列,则可以使用案例,但在您的示例中,
第一个和第二个可以写在 1 个更新语句中,但是在第三个中,您正在更新不同的列,在不同的表上,据我所知,我无法完成。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多