所以我有这两个表。我需要获取表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中提取名称,并将其排列到游戏位置,以便每个团队互相对抗
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
答案 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
;