MySQL: select 来自相同 table 且名称相同的两列
MySQL: select two column from the same table with the same name
我正在创建一个应用程序来管理 game
和 team
数据。这是 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 嵌套在一起的查询:
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 |
+-----+---------------+---------------+
是否有easier/faster/cooler查询得到相同的结果?
注意:SQL Fiddle
您可以在相同的 table 之间进行连接,因此您可以这样做:
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
您需要两个别名:
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
我正在创建一个应用程序来管理 game
和 team
数据。这是 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 嵌套在一起的查询:
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 |
+-----+---------------+---------------+
是否有easier/faster/cooler查询得到相同的结果?
注意:SQL Fiddle
您可以在相同的 table 之间进行连接,因此您可以这样做:
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
您需要两个别名:
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