[英]SQL Query Help - Multiple JOINS
对该SQL查询有麻烦。 情况如下:
我有三个表,其结构如下:
Events -> fields ID and Name,
Players -> fields ID and Name,
Matches -> fields ID, EventID, Player1ID, Player2ID
我想执行一个查询,向我显示匹配表,但将EventID替换为Event.Name,将Player1ID替换为Players.Name,将Player2ID替换为Players.Name。
我很容易使用以下方法获得一名球员和赛事:
SELECT
Players.Name as Player1, Events.Name
FROM
(Matches
INNER JOIN
Events ON (Matches.EventID=Events.ID))
INNER JOIN
Players ON (Matches.Player1ID = Player.ID) ;
但是,如何获得Player2的名称?
将第二个JOIN添加到Players
表中:
SELECT
Players.Name as Player1, Events.Name,
p2.Name as Player2
FROM
Matches
INNER JOIN
Events ON Matches.EventID = Events.ID
INNER JOIN
Players ON Matches.Player1ID = Player.ID
INNER JOIN
Players p2 ON Matches.Player2ID = p2.ID;
您可以通过将表连接在一起来做到这一点。 诀窍是您必须两次包含Players
表。 在这种情况下,您需要使用表别名来区分from
子句中对表的这两个引用:
select m.matchid, e.name as event_name, p1.name as player1_name, p2.name as player2_name
from matches m join
events e
on m.eventid = e.id join
players p1
on m.player1 = p1.id join
players p2
on m.player2 = p2.id;
我还为其他表添加了表别名,这使查询更易于阅读。
SELECT p1.Name, p2.Name, Events.Name
FROM Matches
INNER JOIN Events ON (Matches.EventID=Events.ID))
INNER JOIN Players p1 ON (Matches.Player1ID = p1.ID)
INNER JOIN Players p2 ON (Matches.Player2ID = p2.ID)
您需要使用Player2ID
字段上的Players
表再次加入查询。 因此,将查询更改为:
SELECT one.Name as Player1, two.Name as Player2, Events.Name
FROM
Matches INNER JOIN
Events ON Matches.EventID=Events.ID INNER JOIN
Players one ON Matches.Player1ID = one.ID INNER JOIN
Players two ON Matches.Player1ID = two.ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.