MySQL,如何从第一个表中选择一行,从第二个表中选择两个

时间:2016-01-10 12:27:07

标签: mysql select

我需要从第一个表中选择一行,从第二个表中选择两行,这些行对应于第一个表的结果。我可以用例子更清楚地解释一下。

如下图所示,我有两张桌子。表"游戏"有关于团队之间的游戏的信息(例如,游戏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

感谢您的任何建议。

3 个答案:

答案 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 JOINT1中没有匹配的小组。

答案 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错误。