【问题标题】:Filling column with data from another column in the same table用同一表中另一列的数据填充列
【发布时间】:2019-03-16 14:47:31
【问题描述】:

我是 SQL 新手,这可能相当容易,但我不知道如何使它工作。

我正在尝试用从同一张表中的另一列中提取的数据填充一列。在这种情况下,它是一个带有盒子得分的篮球数据库,我正在尝试填充对手点 (opp_pts) 的列以匹配他们的得分那场比赛的对手得分。每场比赛都由 season_id 和 game_id 匹配。

整个表格大约有 700 行,有几百场比赛和大约 40 支球队,但下面有一个样本......这是一场比赛的例子,比分是 84-81,但我想用适当的填充 opp_team_stats分数

season_id   game_id   team_id     team_pts      opp_team_pts    
  U2018       140    U2018_19      84.0                         
  U2018       140    U2018_23      81.0           

我试过但只能用 84 填充 opp_team_pts 的整个列,这显然是不正确的

UPDATE box_scores 
SET opp_team_pts = (SELECT box_scores.team_pts
FROM box_scores
WHERE box_scores.season_id=box_scores.season_id AND box_scores.game_id=box_scores.game_id);

我确定代码可能是多余的,但据我所知,我理解为什么它会以它的方式填充但似乎无法弄清楚如何修复它......我可能在错误的轨道,但希望能得到一些帮助

【问题讨论】:

  • 你怎么知道对方球队是什么?
  • 在这种情况下,我在我发布的 sn-p 表中选出了许多比赛中的一场比赛,所以这两支球队互相比赛,由 game_id 140 表示,所以比分是 84-81

标签: sql sqlite sql-update


【解决方案1】:

假设每场比赛正好有两支球队,您可以使用相关子查询:

UPDATE box_scores
    SET opp_team_pts = (SELECT bs2.team_pts
                        FROM box_scores bs2
                        WHERE bs2.season_id = box_scores.season_id AND
                              bs2.game_id = box_scores.game_id AND
                              bs2.team_id <> box_scores.team_id
                       );

SQLite 不支持UPDATE 语句中的FROM

【讨论】:

  • @GDolan 。 . .问题是一场比赛有多少支球队。如果有两个以上,那么这将返回一个错误(子查询返回不止一行)。
  • 我尝试运行它,但它在“bs”附近的第一行返回错误:语法错误
  • @GDolan 。 . .这很烦人。 SQLite 的语法图显示它在那里接受一个限定的表名 (sqlite.org/syntax/qualified-table-name.html),但它似乎不起作用。我确定了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2016-05-28
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多