将两个SELECT语句连接到一个表中

时间:2013-11-19 16:45:33

标签: mysql sql database

我正在尝试将两个单独的SQL语句的输出合并到一个表中。我有一个团队名称列表,在一个数据库中有关联的id,另一个数据库在另一个数据库中有匹配列表。 e.g

Teams    
-----------------                            
id   name              
1    Arsenal                    
2    Aston Villa

Matches
--------------------------------
id   home_team_id   away_team_id
1    1                2

在match数据库中,home_team_id和away_team_id是teams数据库中id的外键。我想要做的是输出匹配ID以及与匹配数据库中的id相关联的团队名称。预期产出:

match_id        home_team_name      away_team_name
---------------------------------------------------
1               Arsenal             Aston Villa

目前我有两个选择陈述。

SELECT match_id, name as home_team_name
FROM matches, teams
WHERE home_team_id = id;

SELECT match_id, name as away_team_name
FROM matches, teams
WHERE away_team_id = id;

第一个选择语句输出匹配ID和主队名称,第二个输出匹配ID和客队名称。

有没有办法用我当前的数据库设计实现所需的输出?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

SELECT m.id, t1.name as home_team_name, t2.name as away_team_name
FROM `match` m
INNER JOIN teams t1 ON t1.id = m.home_team_id   
INNER JOIN teams t2 ON t2.id = m.away_team_id

这将两次匹配表与球队表,以获得两个球队的名字。

sqlfiddle demo

请注意,我正在逃避`match`,因为它是reserved word

答案 1 :(得分:0)

如果为它们定义别名,则可以在from子句中多次使用一个表(只能保留一个没有别名的表,因此表名用作别名)。

所以就这样做:

select *
from matches
join teams t1 on t1.id = matches.home_team_id
join teams t2 on t2.id = matches.away_team_id

或者你可以这样做

select *
from matches, teams t1, teams t2
where t1.id = matches.home_team_id and t2.id = matches.away_team_id

并且使用ANSI JOIN(第一种语法)要好得多,它更具可读性,并且当表的数量增加时会有一些左/右连接,可以处理丑陋的事情。

相关问题