来自多个表的带有日期计算的新字段:更新还是过程?

用户名

我对SQL还是很陌生,并试图根据3个非常大的数据库表来计算一个新字段。这是一个抽象:

  • 表1:玩家(包含生日DATE字段)
  • 表2:锦标赛(包含DATETIME字段)
  • 表3:游戏(具有引用players.id和tournass.id的外键)

我想在游戏表中添加一个字段,其中包含比赛当天玩家年龄的十进制表示。

我是否需要编写一个过程/操作循环来完成此任务?还是可以通过更新查询来做到这一点?

spencer7593

您可以使用UPDATE语句执行此操作。(但是,您真的想要吗?)

首先,编写SELECT将为您提供结果语句。

SELECT g.player_id
     , g.tournament_id
     , p.birthday 
     , t.tournament_date
     , DATEDIFF(t.tournament_date,p.birthday) AS days_diff
  FROM games g
  JOIN player p ON p.id = g.player_id
  JOIN tournament t ON t.id = g.tournament_id 

只需添加一个执行您要执行的计算的表达式,然后将其作为列返回即可。

然后,您可以将该SELECT语句用作UPDATE语句中的内联视图。假设您已age_in_daysgames表格中添加一

UPDATE games d
  JOIN ( 
         SELECT g.player_id
              , g.tournament_id
              , p.birthday 
              , t.tournament_date
              , DATEDIFF(t.tournament_date,p.birthday) AS days_diff
           FROM games g
           JOIN player p ON p.id = g.player_id
           JOIN tournament t ON t.id = g.tournament_id 
       ) s
   ON s.player_id     = d.player_id
  AND s.tournament_id = d.tournament_id
  SET s.age_in_days   = s.days_diff

接下来,我们必须关注“大”表,并避免产生会产生大量回滚的巨大事务(如果这些表是InnoDB表)。

如果这是一个问题,请通过在行视图查询中添加谓词(例如)并对其进行细分来进行“批处理”中的UPDATE操作WHERE g.player_id = 42,然后对每个UPDATE运行一次player_id


如果您希望年龄以“十进制年”为单位,则需要开发一个表达式以返回该值。(作为基本的近似值,将天数的差除以一年中的天数365.25。这会使您非常接近。)


(在回答开始时,我问道,您真的要这么做吗?

请注意,如果birthday更新了玩家值或tournament_date更改了a ,则games表中存储的计算值将不一致。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自两个表的带有WHERE的MySQL更新字段

来自分类Dev

计算来自多个表的联接

来自分类Dev

计算来自多个表的数据

来自分类Dev

计算来自多个表的关联

来自分类Dev

来自多个表的MYSQL查询,多个表具有多个计数和一个计算所得的行

来自分类Dev

SQL View问题:来自多个表的条件计算列

来自分类Dev

计算来自多个表的分组记录

来自分类Dev

SQL查询汇总来自多个不同表的字段

来自分类Dev

在红移中更新来自多个表的数据

来自分类Dev

来自多个表的求和?

来自分类Dev

来自多个表的图表

来自分类Dev

带有多个 If 的计算字段

来自分类Dev

来自ssrs的更新字段

来自分类Dev

查询来自多个表的所有数据

来自分类Dev

来自多个过程的管道输入

来自分类Dev

来自多个表 MySQL 的多个 Where OR

来自分类Dev

在存储过程中显示来自多个表的相关查找信息

来自分类Dev

来自多个日期范围的iReport输入

来自分类Dev

更新了关系表,实体模型关系没有新字段

来自分类Dev

来自多个承诺的增量UI更新

来自分类Dev

Rails来自多个表的单个结果

来自分类Dev

来自多个表的sql count()

来自分类Dev

来自多个表的SugarORM查询?

来自分类Dev

来自多个表的SQL LIKE

来自分类Dev

来自多个表的SQL数据

来自分类Dev

来自多个连接表的总时间

来自分类Dev

来自多个表的多行的MySQL SUM

来自分类Dev

来自多个表的SQL计数行

来自分类Dev

汇总来自多个SQLite表的分数