我有两张相互关联的桌子。
第一个表是tournaments并具有以下字段

tournamentId
tournamentName
tournamentStatus
tournamentBuyIn
tournamentPrizePool
tournamentStart
tournamentEnd
tournamentDuration
tournamentParticipants

第二个表是tourn_results,它包含了上述锦标赛表的结果。它包含以下字段。
result_id
tournamentId
tournamentName
tournamentDate
playerId
playerName
playerRank
prizeWon
tournamentParticipants

我添加了tournamentNametournamentDate字段,以便在搜索1000000多条记录时更轻松。以前,我使用以下代码来提取记录。
SELECT r.playerName,
   SUM(CASE WHEN r.playerRank = 1 THEN 1 ELSE 0 END) AS 'FirstPlace',
   SUM(CASE WHEN r.playerRank = 1 THEN 1 ELSE 0 END)/Count(*)*100 AS 'WinPercent',
   SUM(CASE WHEN r.playerRank = 2 THEN 1 else 0 end) AS 'SecondPlace',
   SUM(CASE WHEN r.playerRank = 2 THEN 1 ELSE 0 END)/Count(*)*100 AS 'LosePercent',
COUNT(*) AS 'TotalGames'
  FROM `tournaments` t
  LEFT
  JOIN `tourn_results` r
    ON r.tournamentId = t.tournamentId
 WHERE t.tournamentName LIKE "Royal Flush Daily"
   AND t.tournamentStart BETWEEN '2015-06-08 00:00:00' AND '2015-06-08 23:59:59'
   AND (r.playerRank = 1 OR r.playerRank = 2)
 GROUP
    BY r.playerName
 ORDER
    BY `FirstPlace` ASC

这对弄清结果起到了很好的作用。不过,如果tournamentName与我的查询匹配,我想看看每天有多少条记录。我想最好的方法是将tournamentDate and tournamentName字段添加到结果数据库中。
我现在需要从tournamentName表中复制tournaments以及tournamentDate如果BETWEEN '2015-06-08 00:00:00' AND '2015-06-08 23:59:59'
我甚至不知道怎么开始。
样本数据
为了节省空间,我把比赛缩写为“tú”
结果来自tourn_results
result_id t_Id   t_Name t_Date     playerId playerName playerRank prizeWon  t_part
1109985   407452        0000-00-00 3008     hvca410    2          0.000      2

应使用tournaments表中的信息进行更新
t_Id   t_Name            t_Start             t_End
407452 Royal Flush Daily 2015-07-16 03:02:00 2015-07-16

新的结果应该如下
result_id t_Id   t_Name            t_Date     playerId playerName playerRank prizeWon  t_part
1109985   407452 Royal Flush Daily 2015-07-16 3008     hvca410    2          0.000      2

最佳答案

目前还不完全清楚您想要完成什么,但是如果您只想用tournamentname和tournamented date更新tourn_results表,可以使用以下查询来完成:

update tourn_results tr
join tournaments t on tr.tournamentId = t.tournamentId
set tr.tournamentName = t.tournamentName, tr.tournamentDate = t.tournamentEnd
where t.tournamentEnd BETWEEN '2015-07-16 00:00:00' AND '2015-07-16 23:59:59';

Sample SQL Fiddle
似乎没有必要复制这个名字,因为你可以从锦标赛表中得到它,至于日期,如果日期与获得结果的时间有某种关系,这不是更有意义吗?我猜还有另外一张桌子可以存放比赛的日期。也许那是你真正想要的?

10-06 03:08