SQL:update A其中B是C和D的每个唯一组合的最大值,其中D是连接表的元素

时间:2013-11-19 01:03:20

标签: python mysql sql join mysql-python

由于这很复杂,我将举例说明我正在尝试的内容:

在第一个表格用户数据中,我有用户和他们保存的游戏文件(保存文件)。每个用户可以与多个保存的游戏文件相关联。 第二个表是服务器上所有已保存游戏文件的分数。每个保存文件都有一行,保存游戏时还有时间戳,此时得分游戏的标题

现在说我想将每个游戏标题的所有用户最新文件重置为零分。这意味着我需要UPDATE Scores SET score=0 WHERE user=x AND title=y AND timestamp = (SELECT max(timestamp) FROM Scores where user=x and title=y);

但是,我不确定如何使用用户直接在分数表中执行此操作。由于用户数据分数表由唯一的保存文件连接,但我知道应该有办法执行此操作。另外,如果有人可以向我推荐处理此迭代的最佳方法,以便语句对所有用户标题对执行,那将会有所帮助!

后勤 - 通过mysqldb使用SQL和Python。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个SQL唯一的解决方案,希望它有所帮助。 您可能需要稍微解决这个问题,但以下SQL代码应该为您解决这个问题...我想

UPDATE scores 
  set score = 0
FROM
scores s
   INNER JOIN users u
      on s.savefileid = u.savefileid -- primary key foreign key relationship here
      AND s.timestamp = (SELECT max(timestamp) FROM Scores ss where ss.savefileid = s.savefileid )
WHERE user=x 
  AND title=y 

在更新之前查看记录列表

Select * 
FROM
scores s
   INNER JOIN users u
      on s.savefileid = u.savefileid -- primary key foreign key relationship here
      AND s.timestamp = (SELECT max(timestamp) FROM Scores ss where ss.savefileid = s.savefileid          )
WHERE user=x 
  AND title=y