简体   繁体   中英

Query that involves dozens of joins to the same table not returning all results

I have a query that joins to the same table more than once and it requires over 2 dozen table aliases. However, it is not returning all the results. Here is the query.

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

However, it only returns random years and not in a particular order either. Also, when I add a where clause to return a specific year, some years work and others don't and the years that go missing do exist in the table.

While @Larnu is correct that you need to normalize your data, in the meantime you can find the data problem by replacing your JOINs with LEFT JOIN . It will show which column(s) have a NULL record, which is causing your data to be "missing".

It's possible that this is "expected" results in that, if you have an odd number of teams, it's possible that some brackets might be skipped.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM