SQL Server:查询连接两个表

时间:2014-04-29 21:54:04

标签: sql sql-server database

尝试基于挑战匹配系统创建SQL Server查询。我想在查询中加入两个表:UsersChallengeMatches

Users表格中的列为UserID, UserDisplayName

ChallengeMatch表格中的列为ChallengeMatchID, ChallengerUserID, ChallengeeUserID

当然,所有ChallengeeUserIDChallengerUserID都在Users表中列为唯一身份用户。我希望查询要做的是针对每个挑战匹配(ChallengeMatch表中的行),返回两个挑战参与者的UserDisplayName,例如PlayerName1PlayerName2

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:7)

您需要两次加入Users表。这应该可以解决问题:

select 
    u1.UserDisplayName as [Challenger],
    u2.UserDisplayName as [Challengee]
from ChallengeMatch cm
left outer join Users u1
    on cm.ChallengerUserID = u1.UserID
left outer join Users u2
    on cm.ChallengeeUserID = u2.UserID
where cm.ChallengeMatchID = 2 /* specify value for relevant match */

Here is a SQL Fiddle with this example working.

答案 1 :(得分:2)

Select * FROM 
    (
      SELECT 'Challenger' [Type]
          ,ChallengerUserID [UserID] 
      from ChallengeMatch 
      where ChallengeMatchID=2
     UNION ALL
      SELECT 'Challengee' [Type]
           ,ChallengeeUserID [UserID] 
      from ChallengeMatch 
      where ChallengeMatchID=2
          ) as c
Inner join Users u
  ON c.UserID=u.UserID

返回的结果与@Citsonga略有不同,但也有效 我会考虑更多地存储信息,就像嵌套选择看起来一般(除了Type将是你需要的用户类型表的Int外键),以便更容易地加入这种性质。它还允许您扩展到每场比赛超过1个挑战者/ e