1

我在 SQL Server 中有 2 个表:

在此处输入图像描述

现在我想写一个 select 语句来加入这 2 个表来获取MatchId,Host nameGuest 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

我有错误。

请帮忙!

4

4 回答 4

3

您将需要查看简单的连接

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 表中,以获取每个单独的团队名称。我使用别名来防止您在第二次尝试中看到的错误。

于 2012-10-12T19:03:12.550 回答
3

您只需要在桌子上加入两次:

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
于 2012-10-12T19:03:32.067 回答
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
于 2012-10-12T19:07:51.227 回答
0

您收到错误的原因是因为Match是 SQL 中的关键字,因此您需要使用'Match'或为您的表使用不同的名称来转义它。

我将只接受亚当的查询并根据您的需要对其进行修改:

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
于 2012-10-12T19:13:37.007 回答