左连接三个MySQL表


Left Joining three MySQL tables

tbl_teams: team_id|team_name
tbl_players: player_id|player_fname|player_sname|player_bplace|player_bdate
tbl_players_stats: player_id|season_id|player_squad_no|team_id|player_apps|player_goals

如果这是一个基本问题,很抱歉,但从上面所有的MySQL表和列中,我想加入这些表,然后显示选择season_id和team_id的结果。我需要使用这样的PHP:

player_squad_no|player_sname,player_fname|team_name|player_apps|player_goals

我看了这里的例子,但仍然不知道如何编写MySQL查询来使用三个独立的表,以及如何在列名之前指定表名。我见过一些只有首字母的例子。例如tt.teams。Left Join是这样做的吗?

任何帮助都将不胜感激。

使用三个独立的表,您只需像这样编写联接:

SELECT *
FROM Table_A AS A
LEFT JOIN Table_B AS B USING(ID)
LEFT JOIN Table_C AS C USING(ID)

请注意,USING(column)ON A.column = B.column的语法替代方案,当要联接的列在两个表中具有相同名称时,可以使用它。

在上面的示例中,表使用AS进行了别名化,因此您可以使用别名而不是完整的表名来引用它们。(AS实际上是可选的;如果你按字符付费,你可以在表后面立即给出别名。)试着选择一个在你看的时候有意义的别名;很多时候人们会这样化名:

SELECT a.Name, b.State
FROM Customers AS a
LEFT JOIN Orders AS b
...etc.

但是,如果你有一个更长的查询,你应该如何记住ab指的是什么表?至少,将Customers AS COrders AS O别名是有意义的;在某些情况下,我会更进一步:例如Registration AS REG。随着JOIN越来越多的表在一起,这一点变得越来越重要。

以下是编写查询的一种方法:

SELECT
    Stats.player_squad_no,
    CONCAT_WS(', ', Players.player_sname, Players.player_fname) AS player_full_name,
    Teams.team_name,
    Stats.player_apps,
    Stats.player_goals
FROM tbl_players AS Players
LEFT JOIN tbl_players_stats AS Stats USING(player_id)
LEFT JOIN tbl_teams AS Teams USING(team_id)

CONCAT_WS()功能用于按照您指示的显示方式组合玩家的全名。由于这个函数会输出一个名称混乱的列,所以我还给它起了一个别名。

这应该能在中工作

SELECT tbl_players_stats.player_squad_no, 
    tbl_players.player_sname, 
    tbl_players.player_fname, 
    tbl_teams.team_name, 
    tbl_players_stats.player_apps, 
    tbl_players_stats.player_goals
FROM tbl_players 
    JOIN tbl_players_stats ON tbl_players.player_id = tbl_players_stats.player_id 
    JOIN tbl_teams ON tbl_teams.team_id = tbl_players_stats.team_id
    SELECT player_squad_no , player_sname, player_fname,team_name, player_apps, player_goals
 FROM tbl_players_stats as s 
JOIN tbl_players as p ON s.player_id=p.player_id 
JOIN tbl_teams as t ON s.team_id=t.team_id
NothingJoining是一个简单的概念。但是我们应该为表使用适当的列。在选择要选择的列列表时,我们应该小心使用表别名。尝试以下代码
select c.player_squad_no,b.player_sname,b.player_fname,a.team_name,c.player_apps,c.player_goals
  from tbl_teams a,tbl_players b,tbl_players_stats c
 where a.team_id=c.team_id 
   and b.player_id=c.player_id