我有两个表需要完全相同的值用于非规范化目的.
这是查询.
第一张桌子
UPDATE Table_One
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 AND lid = 1 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
第二张桌子
UPDATE Table_Two
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,两个表之间的唯一区别是它们的名称和表两个没有该字段 lid
无论如何将两个更新组合成一个?
rre*_*ein 42
如文档中所述,应该可以使用多表更新.
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
Run Code Online (Sandbox Code Playgroud)
注意:多表不支持LIMIT,因此根据细节可能会导致更多悲伤.
存储过程或事务可能是一个更好的解决方案.
如果从Table_One到Table_Two存在一对一或一对多的关系,这将起作用:
UPDATE Table_One T1, Table_Two T2
SET T1.win = T1.win+1, T1.streak = T1.streak+1, T1.score = T1.score+200,
T2.win = T2.win+1, T2.streak = T2.streak+1, T2.score = T2.score+200
WHERE T1.userid = 1 AND T1.lid = 1 AND T2.userid = T1.userid;
Run Code Online (Sandbox Code Playgroud)