【发布时间】: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