我在SQL Server中有两个表:
现在我想编写一个select语句来连接这两个表来获取MatchId
,Host name
和Guest name
。
我尝试了什么:
select Match.Id, Team.Name, Team.Name
from Match
join Team on Match.HostId = Team.Id
我的主机名和客人名称相同。
select Match.Id, Team.Name, Team.Name
from Match
join Team on Match.HostId = Team.Id
join Team on Match.GuestId = Team.Id
我收到了错误。
请帮忙!
答案 0 :(得分:3)
您需要查看simple joins:
SELECT m.Id AS MatchId, h.Name AS HostName, g.Name AS GuestName
FROM Match AS m
INNER JOIN Team AS h ON m.HostId = h.Id
INNER JOIN Team AS g ON m.GuestId = g.Id
您需要将Match表的HostId和GuestId分别加入Team表,以获取每个团队的名称。我使用了别名来防止你在第二次尝试中看到的错误。
答案 1 :(得分:3)
你只需要加入桌子两次:</ p>
select m.id MatchId,
h.name HostName,
g.name GuestName
from match m
left join team h
on m.hostid = h.id
left join team g
on m.guestid = g.id
答案 2 :(得分:0)
假设ID用于链接两个表中的记录(即,虽然它是两个表上的主键,但它也被用作外键):
select m.HostId, m.GuestId, t.Name
from Match m
left outer join Team t
on m.id = t.id
如果ID不相同,您可以执行以下操作以使所有团队与所有匹配项匹配:
select m.HostId, m.GuestId, t.Name
from Match m
cross join Team t
如果这不是你所追求的,你可能需要在其中一个表中添加一个外键,或者创建一个带有MatchId和TeamId的新表来链接这两个表,然后加入那个
create table MatchTeam
(
MatchId bigint not null
,TeamId bigint not null
)
go
select m.HostId, m.GuestId, t.Name
from Match m
left outer join MatchTeam mt
on m.Id = mt.MatchId
left outer join Team t
on mt.TeamId = t.id
如果hostid和guestid与团队表相关:
select m.id MatchId
, h.Name HostName
, g.Name GuestName
from Match m
left outer join Team h
on m.HostId = h.id
left outer join Team g
on m.GuestId = h.id
答案 3 :(得分:0)
您收到错误的原因是因为Match
是SQL中的关键字,因此您需要使用'Match'
或使用表的其他名称对其进行转义。
我将接受Adam的查询并根据您的需要进行修改:
SELECT m.Id AS MatchId, h.Name AS HostName, g.Name AS GuestName
FROM `Match` AS m
INNER JOIN Team AS h ON m.HostId = h.Id
INNER JOIN Team AS g ON m.GuestId = g.Id