【问题标题】:MySQL, How to select one row from first table and two from the second oneMySQL,如何从第一个表中选择一行,从第二个表中选择两行
【发布时间】:2016-01-10 12:27:07
【问题描述】:

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

如下所示,我有两个表。表“游戏”包含有关团队之间游戏的信息(例如,游戏 nr 1 由团队 NR 10 和团队 NR 11 进行)。在第二张表中,我只有球队的名字。问题是如何使用一个 Select 从第二个表中获取有关游戏的信息以及团队名称?

例如我想获取谁玩游戏 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

感谢您的建议。

【问题讨论】:

    标签: mysql select


    【解决方案1】:

    我认为您想使用联接。它可能看起来像这样:

    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 表示列出所有比赛,即使T1T2 中没有匹配的球队。

    【讨论】:

      【解决方案2】:

      你可以试试:-

      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;
      

      子查询挑选出所需的团队名称并命名它们出现的“列”。

      【讨论】:

        【解决方案3】:

        如果您只想在 1 行中包含所有值,我唯一能做的就是使用 GROUP_CONCAT 函数。我不建议在内联查询或子查询上使用,因为如果找不到记录,它将产生 mysql 错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-13
          • 2010-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多