当前位置: 首页 > 面试题库 >

MySql一次更新两个表

杜俊逸
2023-03-14
问题内容

我有两个表需要相同的值以实现非规范化。

这是查询。

第一张桌子

UPDATE Table_One 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 AND lid = 1 LIMIT 1

第二张桌子

UPDATE Table_Two 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 LIMIT 1

如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 lid

无论如何将两个更新合并为一个?


问题答案:

如文档中所述,应该可以进行多表更新。

http://dev.mysql.com/doc/refman/5.5/en/update.html

UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid)
SET
  a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200,
  b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200 
WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1

注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦。

存储过程或事务可能是更好的解决方案。



 类似资料:
  • 问题内容: 我正在尝试根据另一个MySQL信息更新一个MySQL表。 我的桌子看起来像: 而表如下所示: 我想更新在与来自基于(存储在字符串字段)。 希望更新后的表如下所示: 我有一个有效的查询,但是非常慢: 这使我的CPU耗尽,最终导致超时,并且仅执行了一部分更新(有数千个要匹配的值)。我知道匹配的速度会很慢,但这是我必须将它们匹配在一起的唯一数据。 有没有更好的方法来更新这样的值?如果可以更快

  • 问题内容: 我想一次更新两个表。下面的代码似乎工作正常。但是,在某些情况下,bidGroups中没有条目,这意味着整个语句将失败。我如何调整它,以便它更新第一位(watchedItems),并且如果watchedItems.bidGroupID为NULL则不尝试第二部分 我试过了,但是语法是错误的。 问题答案: 以这种方式尝试LEFT JOIN: ......

  • 问题内容: 我正在尝试使用表B中的数据更新表A。我认为我可以执行以下操作: 但是a,这行不通。 有人知道我该怎么做吗? 问题答案: 您的查询不起作用,因为您没有 FROM 子句来指定要通过A / B别名的表。 请尝试使用以下内容: 就我个人而言,我更喜欢使用更明确的联接语法以保持清晰,即

  • 问题内容: 我有这样的查询: 但是我只想对前400名进行此操作。我尝试添加“ limit 0,400”(就像我在查询中那样),但这没有用。我进行了一些搜索,而mysql似乎不像SQL Server那样支持TOP(n)命令。 知道我该怎么做吗? 编辑:为了将来参考,我使用以下样式进行选择,效果很好: 但无论出于何种原因,在更新中它都不会与“ 0”一起使用。我会认为这种不一致和模棱两可的行为,但是哦。

  • 问题内容: 我想查询一个mySQL表以提取两次和两次之间的数据。我知道如何使用“ between”调用对单个“ datetime”列执行此操作,但是我的列是一个“ date”列和一个“ time”列。我在网上可以找到的所有解决方案都是针对单个datetime列的。 我的范围从15:30的“ day1”到15:14的day1 + 1day 到目前为止,我可以获得以下范围(有效): 但是我显然需要合并

  • 问题内容: 是否有一种简短的方法可以在Python中连续两次或更多次调用函数?例如: 也许像: 问题答案: 我会: 的是其值为你不关心的变量约定。 您可能还会看到有人写: 但是,这样做会稍微贵一些,因为它会创建一个包含每次调用(即使是)的返回值的列表,然后将结果列表丢弃。我不建议使用,除非你 正在 使用的返回值的列表。