我想将指定行中的一项插入另一张表

时间:2019-05-13 15:08:27

标签: mysql

所以我有这两个表。我需要获取表1第一行第三列中的内容(在这种情况下为鸭子),并将其插入表2第一行第六列中(在[此处]标出)

       table 1 (teams)
  PK
team_id   groupno   tname   oname   onumber   oemail   group   series
   1         1      ducks   laura    123      a@b.com    A       1
   2         2      birds   john     456      c@d.com    A       1     
   3         3      redds   hanna    789      e@f.com    A       1
   4         4      blues   mark     102      g@h.com    A       1

team_id和groupno看起来相同,groupno最多增加10个(计算组中的所有团队),team_id继续显示

       table 2 (games)
  PK
game_id   match_id   time   field   group   team1   team2   series
  1           1      0900     1       A     [here]   N/A      1
  2           2      0930     1       A      N/A     N/A      1
  3           3      1000     1       A      N/A     N/A      1
  4           4      1030     1       A      N/A     N/A      1

game_id和match_id arent相同,math_id最高为36(计算单个系列中所有游戏的数目),game_id继续运行

在我一直从事的工作中

UPDATE games INNER JOIN teams
       ON games.game_id = 1
       SET games.team2 = teams.tname
       WHERE teams.series=1;

我希望结果是什么

示例:

  1. vs 2. --- 3. vs 4.
  2. vs 3. --- 2. vs 4。
  3. vs 4. --- 2. vs 3。

应该从表1中提取名称,并将其排列到游戏位置,以便每个团队互相对抗

 PK
game_id   match_id   time   field   group   team1   team2   series
  1           1      0900     1       A     ducks   birds     1
  2           2      0930     1       A     reds    blues     1
  3           3      1000     1       A     ducks   reds      1
  4           4      1030     1       A     birds   blues     1
  5           5      1100     1       A     ducks   blues     1
  6           6      1130     1       A     reds    birds     1

1 个答案:

答案 0 :(得分:2)

我认为这应该匹配所有组合并将其放在游戏顺序中

UPDATE games g
INNER JOIN (
    SELECT
        (@cnt := @cnt + 1) game_id, t.team1, t.team2
    FROM (
        SELECT
            DISTINCT t1.tname team1, t2.tname team2
        FROM teams t1
        CROSS JOIN (SELECT DISTINCT tname FROM teams) t2
        WHERE t1.tname <> t2.tname
        ) t
    CROSS JOIN (SELECT @cnt := 0) c
    ) mt ON mt.game_id = g.game_id
SET g.team1 = mt.team1,
    g.team2 = mt.team2
;

尽管我建议使用团队ID代替团队名称。


如果您是指id,那么:

UPDATE table2 ti
SET ti.item2 = (SELECT t1.item FROM table1 t1 WHERE t1.id = 3)
WHERE ti.id = 1
;