我有两个表需要完全相同的值来进行非规范化。
这是查询。
第一张 table
UPDATE Table_One
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 AND lid = 1 LIMIT 1
第二张 table
UPDATE Table_Two
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 LIMIT 1
如您所见,两个表之间的唯一区别是它们的名称,而表 2 没有字段 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 一次更新两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765490/