【问题标题】:MySQL: select two column from the same table with the same name [duplicate]MySQL:从同一个表中选择同名的两列[重复]
【发布时间】:2023-04-08 00:06:01
【问题描述】:

我正在创建一个应用程序来管理 gameteam 数据。这是 mySQL 数据库结构:

CREATE TABLE team (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE game (
    id INT NOT NULL AUTO_INCREMENT,
    id_team_A INT NOT NULL,
    id_team_B INT NOT NULL,
    PRIMARY KEY (id)
);

-- TEST VALUES: --

INSERT INTO team VALUES
    (1, "Barcelona"),
    (2, "Milan"),
    (3, "Real Madrid"),
    (4, "Inter");

INSERT INTO game VALUES
    (1, 1, 3),
    (2, 2, 4);

如您所见,每个 match 都有 2 个不同的 team 关联。

我正在尝试(没有成功)进入单个查询匹配 id、团队 A 名称、团队 B 名称

首先我尝试了这样的查询:

SELECT game.id, team.name, team.name
FROM team INNER JOIN game
ON game.id_team_A = team.id;

但我的查询不关心 match.id_team_B 并且重复的 match.name 字段不会解决问题。

然后我开始使用嵌套在一起的选择查询:

SELECT @g_id := game.id as id,
(SELECT team.name FROM team INNER JOIN game ON game.id_team_A = team.id WHERE game.id = @g_id) AS team_A,
(SELECT team.name FROM team INNER JOIN game ON game.id_team_B = team.id WHERE game.id = @g_id) AS team_B
FROM game;

最后我得到了我想要的:

+-----+---------------+---------------+
| id  |    team_A     |    team_B     |
+-----+---------------+---------------+
|  1  |   Barcelona   |  Real Madrid  |
+-----+---------------+---------------+
|  2  |     Milan     |     Inter     |
+-----+---------------+---------------+

是否有更简单/更快/更酷的查询来获得相同的结果?

注意:SQL Fiddle

【问题讨论】:

    标签: mysql inner-join


    【解决方案1】:

    你需要两个别名:

    SELECT g.id, t1.name team_A, t2.name team_B
    FROM game g, team t1, team t2
    WHERE g.id_team_A = t1.id AND g.id_team_B = t2.id
    

    或加入:

    SELECT g.id, t1.name team_A, t2.name team_B
    FROM game g JOIN team t1 ON g.id_team_A = t1.id
    JOIN team t2 ON g.id_team_B = t2.id
    

    【讨论】:

    • 其实一个别名就可以了,这样就不会有名字冲突了
    【解决方案2】:

    你可以在同一个表之间进行连接,所以你可以这样做:

    SELECT g.id as id, a.name as team_a, b.name as team_b 
    FROM team a INNER JOIN game g ON g.id_team_A = a.id
    INNER JOIN team b ON g.id_team_B = b.id
    

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2016-10-25
      相关资源
      最近更新 更多