【问题标题】:Adding numbers from one table to another using INNER JOINs - help!使用 INNER JOIN 将数字从一个表添加到另一个表 - 帮助!
【发布时间】:2011-06-28 16:46:44
【问题描述】:

我在网上冲浪并找到了与我想要的类似的东西,但它没有执行...请帮助

我的表格结构如下:

TABLE team
  id integer autoincrement primary key,
  name varchar,
  pointsfavor integer,
  pointscontra integer

TABLE game
  id integer autoincrement primary key,
  team1_id integer,
  team2_id integer,
  score1 integer, /*score for team1*/
  score2 integer /*score for team2*/

到现在为止我有这个更新声明:

UPDATE team 
INNER JOIN game g1 ON (team.id = g1.team1_id)
INNER JOIN game g2 ON (team.id = g2.team2_id)
SET pointsfavor = pointsfavor 
      + IF(g1.score1 > g1.score2, g1.score1 - g1.score2, 0) 
      + IF(g2.score2 > g2.score1, g2.score2 - g2.score1, 0)
  , pointscontra = pointscontra 
      + IF(g1.score1 < g1.score2, g1.score2 - g1.score1, 0) 
      + IF(g2.score2 < g2.score1, g2.score1 - g2.score2, 0)
WHERE g1.id = 1;

当我将它放入我的 sql 中时,它会执行该函数,但它不会改变我的团队中的“pointsfavor”和“pointscontra”字段......所以它说,受影响的行 (0)......

看:

这是我在 game 表中输入的值(score1 和 score2):

这是我执行代码后的 team 表...保持不变:

请帮忙。

【问题讨论】:

    标签: php sql join inner-join sql-update


    【解决方案1】:

    两个更新(每个团队一个):

    UPDATE team t1
    SET t1.pointsfavor = t1.pointsfavor + IF(game.score1 > game.score2, game.score1 - game.score2, 0)
    , t1.pointscontra = t1.pointscontra + IF(game.score2 > game.score1, game.score2 - game.score1, 0)
    FROM team
    INNER JOIN game ON game.team1_id=t1.id
    WHERE game.id = 1
    
    UPDATE team t2
    SET t2.pointsfavor = t2.pointsfavor + IF(game.score2 > game.score1, game.score2 - game.score1, 0)
    , t2.pointscontra = t2.pointscontra + IF(game.score1 > game.score2, game.score1 - game.score2, 0)    
    FROM team
    INNER JOIN game ON game.team2_id=t2.id
    WHERE game.id = 1
    

    【讨论】:

      【解决方案2】:

      使用左连接而不是内连接:

      UPDATE team 
      LEFT JOIN game g1 ON (team.id = g1.team1_id)
      LEFT JOIN game g2 ON (team.id = g2.team2_id)
      SET pointsfavor = pointsfavor 
            + IF(g1.score1 > g1.score2, g1.score1 - g1.score2, 0) 
            + IF(g2.score2 > g2.score1, g2.score2 - g2.score1, 0)
        , pointscontra = pointscontra 
            + IF(g1.score1 < g1.score2, g1.score2 - g1.score1, 0) 
            + IF(g2.score2 < g2.score1, g2.score1 - g2.score2, 0)
      WHERE g1.id = 1;
      

      我不知道你的表格字段是什么或你的代码是如何工作的,但我猜你的问题出在你的 if 语句中 例如在第一次更新 ( pointsfavor ) IF g1.score1 > g1.score2 然后 g1.score1 - g1.score2 和第二个 if,但是在第二个更新时 g1.score1 > g1.score2 然后 pointscontra + 0 + 0 和下一个如果也做同样的事情 - 那么在这个查询中,只有点数受到了影响 因此,当第一个子句语句(pointsfavor)正确时,第二个子句语句不正确! 再看看你的代码;)

      【讨论】:

      • thnx...虽然它只更新了来自 team.id = 1 的积分...对此有什么答案吗?
      • 我不知道你的表格字段是什么或你的代码是如何工作的,但我猜你的问题出在你的 if 语句中:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多