Sql server 2008 SQL Server:对子表进行2次调用的单行结果

Sql server 2008 SQL Server:对子表进行2次调用的单行结果,sql-server-2008,parent-child,Sql Server 2008,Parent Child,我已经搜索过了,但可能没有正确地使用搜索词。对于下面的简单查询,我真的需要一些设计帮助 我有一个列出游戏的父表 GAMENUM HOMEID AWAYID 1 25 29 2 12 17 3 13 12 团队表 TEAMID TEAMNAME 12 Blue 13 Yellow 17 Red 25

我已经搜索过了,但可能没有正确地使用搜索词。对于下面的简单查询,我真的需要一些设计帮助

我有一个列出游戏的父表

GAMENUM     HOMEID     AWAYID
1             25         29
2             12         17
3             13         12
团队表

TEAMID    TEAMNAME
12        Blue 
13        Yellow
17        Red
25        Pink
29        White
我需要的是一个查询,以获得如下列表

GAMENUM    HOMEID    AWAYID   HOMETEAM     AWAYTEAM
1          25        29       Pink         White
2          12        17       Blue         Red
3          13        12       Blue
如果没有与ID相关联的球队代码,我仍然希望返回比赛记录,但如果找不到主场球队或AWAYTEAM名称,则返回NULL。

尝试以下操作:

SELECT DISTINCT p.GAMENUM, p.HOMEID, p.AWAYID, t1.TEAMNAME [HOMETEAM], t2.TEAMNAME [AWAYTEAM]
FROM [Parent] p
LEFT JOIN Team t1 ON t1.TEAMID = p.HOMEID
LEFT JOIN Team t2 ON t2.TEAMID = p.AWAYID
测试用例:

WITH [Parent] AS (SELECT * FROM (
    SELECT 1 [GAMENUM], 25 [HOMEID], 29 [AWAYID] UNION ALL
    SELECT 2, 12, 17 UNION ALL
    SELECT 3, 13, 12) as [Parent]),

[Team] AS (
    SELECT * FROM (
    SELECT 12 [TEAMID], 'Blue' [TEAMNAME] UNION ALL
    SELECT 13, 'Yellow' UNION ALL
    SELECT 17, 'Red' UNION ALL
    SELECT 25, 'Pink' UNION ALL
    SELECT 29, 'White') as [Team])

SELECT p.GAMENUM, p.HOMEID, p.AWAYID, t1.TEAMNAME [HOMETEAM], t2.TEAMNAME [AWAYTEAM]
FROM [Parent] p
LEFT JOIN Team t1 ON t1.TEAMID = p.HOMEID
LEFT JOIN Team t2 ON t2.TEAMID = p.AWAYID

请检查测试用例结果

我猜您的意思是
t1.TEAMNAME作为HOMETEAM,t2.TEAMNAME作为AWAYTEAM
?嗨,伙计们,我对最后四行上面的整个部分有点困惑。我计划使用数百支球队和数千场比赛。要得到一个显示所有游戏和游戏中的球队名称的查询,在上面的示例中是不可能的?看起来我可以通过添加不同的元素使其工作抱歉@JustJeffy,我更改了我的答案