我需要从第一个表中选择一行,从第二个表中选择两行,这些行对应于第一个表的结果。我可以用例子更清楚地解释一下。
如下图所示,我有两张桌子。表"游戏"有关于团队之间的游戏的信息(例如,游戏nr 1由团队NR 10和团队NR 11玩)。在第二个表格中,我只是拥有团队'名。问题是如何使用一个选择获取有关游戏的信息以及第二个表中的球队名称?
e.g。我想获得与团队一起玩游戏NR 3的信息。名。结果应该是:
id = 3, team_nr1 = 14, team_nr2 = 15, team1_name = eee, team2_name = fff
甚至可能吗?
Table: Games
________________________
id team_nr1 team_nr2
1 10 11
2 12 13
3 14 15
Table: Teams
________________________
team_id team_name
10 aaa
11 bbb
12 ccc
13 ddd
14 eee
15 fff
感谢您的任何建议。
答案 0 :(得分:2)
我认为你想使用连接。它看起来像这样:
models.ManyToManyField
还有其他类型的连接。 SELECT G.id, G.team_nr1, G.team_nr2,
T1.team_name AS team1_name, T2.team_name AS team2_name
FROM Games G
LEFT JOIN Teams T1 ON (G.team_nr1 = T1.team_id)
LEFT JOIN Teams T2 ON (G.team_nr2 = T2.team_id)
WHERE G.id = 3
表示列出所有游戏,即使LEFT JOIN
或T1
中没有匹配的小组。
答案 1 :(得分:0)
您可以尝试: -
SELECT ID,
TEAM_NR1,
TEAN_NR2,
(SELECT TEAM_NAME
FROM TEAMS
WHERE TEAMS.TEAM_ID = GAMES.TEAM_NR1) AS TEAM1_NAME,
(SELECT TEAM_NAME
FROM TEAMS
WHERE TEAMS.TEAM_ID = GAMES.TEAM_NR2) AS TEAM2_NAME
FROM GAMES
WHERE GAMES.ID = 3;
子查询选择所需的团队名称并命名"列"它们出现在哪里。
答案 2 :(得分:0)
如果你想只有一行包含你的所有值,我唯一能做的就是使用GROUP_CONCAT函数。我不建议在子查询的内联查询中使用,因为如果没有找到记录,它将产生mysql错误。