更新一个表使用SQL中另一个表的数据

时间:2013-04-11 20:40:31

标签: sql join

对不起我读了几个相同的问题,但仍然无法找到解决方案。

我有两张桌子

photo表:

userID | photoID| score

users表:

userID | totalScore

我想将photoID唯一值传递给照片表(我的意思是我只想在查询中使用该值作为输入变量)。

然后在照片表中获取相应的userID

然后使用users表中生成的唯一userID来更新totalScore,例如

totalScore = totalScore + score

换句话说,我的价值观是

照片表:

userID | photoID| score
bob    |    5   | 500

用户表:

userID | totalScore
bob    |    5000

我希望在输入photoId=5

的查询后,users表看起来像
userID | totalScore
bob    |    5500

希望我足够清楚。

___________________________ EDIT ________________________

https://stackoverflow.com/a/707668/842644

这个人有所帮助。可能并非每个服务器都支持更新连接表示法。想分享

3 个答案:

答案 0 :(得分:2)

update users 
set totalScore = totalScore + p.score
from users left join photo p on users.userId = p.userId
where p.photoID = 5

答案 1 :(得分:0)

以下是基于另一个表进行更新的方法,但您可能想要某种方法来确定它是否已经更新。

UPDATE users
SET totalScore = TotalScore+tphoto.score
FROM users tuser
INNER JOIN photo tphoto ON tuser.userid = tphotos.userid;

答案 2 :(得分:0)

假设总得分应该是照片表中所有用户点的总和

UPDATE users 
INNER JOIN 
    (SELECT userID, SUM(photo) as 'total' FROM photo GROUP BY userID) 
    x ON x.userID=users.userID 
SET users.totalScore=x.total

我没有一张表来反对。如果您有mysql语法问题,我建议使用sequel pro或其他可以提供错误消息的工具。我还建议您使用自动递增整数作为用于在2个表之间进行映射的键。每个用户都应该有一个唯一的整数id。这样,如果你有两个鲍勃没有问题。

这是另一个可能提供进一步见解的similar question

编辑:如果您只想更新bob,请将此添加到结尾

WHERE userId='bob'