Sql 涉及数十个到同一个表的联接但不返回所有结果的查询

Sql 涉及数十个到同一个表的联接但不返回所有结果的查询,sql,sql-server,join,Sql,Sql Server,Join,我有一个多次连接到同一个表的查询,它需要超过24个表别名。然而,它并没有返回所有结果。这是问题所在 Select bracketID_1, bracketWins_1, a.logo as bracketID1_logo, bracketID_2, bracketWins_2, b.logo as bracketID2_logo, bracketID_3, bracketWins_3, c.logo as bracketID3_logo, bracketID_4, bracketWins_4

我有一个多次连接到同一个表的查询,它需要超过24个表别名。然而,它并没有返回所有结果。这是问题所在

Select 
bracketID_1, bracketWins_1, a.logo as bracketID1_logo, bracketID_2, bracketWins_2, b.logo as bracketID2_logo, bracketID_3, bracketWins_3, c.logo as bracketID3_logo, 
bracketID_4, bracketWins_4, d.logo as bracketID4_logo, bracketID_5, bracketWins_5, e.logo as bracketID5_logo, bracketID_6, bracketWins_6, f.logo as bracketID6_logo, 
bracketID_7, bracketWins_7, g.logo as bracketID7_logo, bracketID_8, bracketWins_8, h.logo as bracketID8_logo, bracketID_9, bracketWins_9, i.logo as bracketID9_logo, 
bracketID_10, bracketWins_10, j.logo as bracketID10_logo, bracketID_11, bracketWins_11, k.logo as bracketID11_logo, bracketID_12, bracketWins_12, l.logo as bracketID12_logo, 
bracketID_13, bracketWins_13, m.logo as bracketID13_logo, bracketID_14, bracketWins_14, n.logo as bracketID14_logo, bracketID_15, bracketWins_15, o.logo as bracketID15_logo, 
bracketID_16, bracketWins_16, p.logo as bracketID16_logo, bracketID_17, bracketWins_17, q.logo as bracketID17_logo, bracketID_18, bracketWins_18, r.logo as bracketID18_logo,
bracketID_19, bracketWins_19, s.logo as bracketID19_logo, bracketID_20, bracketWins_20, t.logo as bracketID20_logo, bracketID_21, bracketWins_21, u.logo as bracketID21_logo,
bracketID_22, bracketWins_22, v.logo as bracketID22_logo, bracketID_23, bracketWins_23, w.logo as bracketID23_logo, bracketID_24, bracketWins_24, x.logo as bracketID24_logo,
bracketID_25, bracketWins_25, y.logo as bracketID25_logo, bracketID_26, bracketWins_26, z.logo as bracketID26_logo, bracketID_27, bracketWins_27, aa.logo as bracketID27_logo,
bracketID_28, bracketWins_28, ab.logo as bracketID28_logo, bracketID_29, bracketWins_29, ac.logo as bracketID29_logo, bracketID_30, bracketWins_30, ad.logo as bracketID30_logo

from YearlyPlayoffResults

join teams a on YearlyPlayoffResults.bracketID_1 = a.Abbreviation
join teams b on YearlyPlayoffResults.bracketID_2 = b.Abbreviation
join teams c on YearlyPlayoffResults.bracketID_3 = c.Abbreviation
join teams d on YearlyPlayoffResults.bracketID_4 = d.Abbreviation
join teams e on YearlyPlayoffResults.bracketID_5 = e.Abbreviation
join teams f on YearlyPlayoffResults.bracketID_6 = f.Abbreviation
join teams g on YearlyPlayoffResults.bracketID_7 = g.Abbreviation
join teams h on YearlyPlayoffResults.bracketID_8 = h.Abbreviation
join teams i on YearlyPlayoffResults.bracketID_9 = i.Abbreviation
join teams j on YearlyPlayoffResults.bracketID_10 = j.Abbreviation
join teams k on YearlyPlayoffResults.bracketID_11 = k.Abbreviation
join teams l on YearlyPlayoffResults.bracketID_12 = l.Abbreviation
join teams m on YearlyPlayoffResults.bracketID_13 = m.Abbreviation
join teams n on YearlyPlayoffResults.bracketID_14 = n.Abbreviation
join teams o on YearlyPlayoffResults.bracketID_15 = o.Abbreviation
join teams p on YearlyPlayoffResults.bracketID_16 = p.Abbreviation
join teams q on YearlyPlayoffResults.bracketID_17 = q.Abbreviation
join teams r on YearlyPlayoffResults.bracketID_18 = r.Abbreviation
join teams s on YearlyPlayoffResults.bracketID_19 = s.Abbreviation
join teams t on YearlyPlayoffResults.bracketID_20 = t.Abbreviation
join teams u on YearlyPlayoffResults.bracketID_21 = u.Abbreviation
join teams v on YearlyPlayoffResults.bracketID_22 = v.Abbreviation
join teams w on YearlyPlayoffResults.bracketID_23 = w.Abbreviation
join teams x on YearlyPlayoffResults.bracketID_24 = x.Abbreviation
join teams y on YearlyPlayoffResults.bracketID_25 = y.Abbreviation
join teams z on YearlyPlayoffResults.bracketID_26 = z.Abbreviation
join teams aa on YearlyPlayoffResults.bracketID_27 = aa.Abbreviation
join teams ab on YearlyPlayoffResults.bracketID_28 = ab.Abbreviation
join teams ac on YearlyPlayoffResults.bracketID_29 = ac.Abbreviation
join teams ad on YearlyPlayoffResults.bracketID_30 = ad.Abbreviation

但是,它只返回随机年份,也不按特定顺序返回。此外,当我添加where子句以返回特定年份时,有些年份有效,有些年份无效,而缺少的年份确实存在于表中

虽然@Larnu正确地指出您需要规范化数据,但与此同时,您可以通过将
连接
替换为
左连接
来发现数据问题。它将显示哪些列具有导致数据“丢失”的
NULL
记录


这可能是“预期”的结果,如果您有奇数个团队,可能会跳过一些括号。

似乎问题在于您的表设计;你愿意修理它吗?当然。请告知。然而,我不认为表格设计中存在逻辑错误。确实出现的结果实际上是准确的。它只是没有返回所有的结果。注释掉一半的连接,运行查询。继续,直到找到不产生任何结果的联接。问题是您有非标准化数据。为什么有30个括号列?你应该有两个;括号编号和当前存储在30个不同括号中的值;结果是很多行。不过我相信我的数据是标准化的。我没有在连接中使用INT,因为每个团队缩写都是唯一的,当涉及到设计查询或查看结果时,使用团队缩写比使用数字容易得多。我宁愿看到湖人队的“LAL”而不是14岁。请给出建议。诚实的问题,是什么让它没有正常化?太好了!我仍然建议您考虑创建一个表,将
team
表与几个列中的结果链接起来:一列用于
bracketID
,另外两列用于该括号中的两个
team\u缩写
ID。最后一个或两个以上的分数,或者两个分数(如果你需要的详细程度)。然后可以根据需要使用任意多的括号。但与此同时,如果这解决了您眼前的问题,您可能希望将答案标记为“已接受”。干杯诚实的问题,为什么我要创建另一个表时,这个查询(固定顺便说一句,ID不匹配)可以给我这些相同的结果?这个查询结果做的是给我整个NBA季后赛的结果在过去35年。每行代表一年。我使用这些数据在ASP.net中的代码端组成一个对象。那个物体,将完成你们在前端看到的支架。实际上,我现在完全理解你们的意思了!这是一种非常低效和混乱的方法。我正在重新设计桌子。我确实用上一个解决了这个问题,但是继续在表上运行不同的数据将是一个复杂而不必要的噩梦。再次感谢各位!