sql >> Databasteknik >  >> RDS >> Mysql

Hur man går med har många relationstabeller och hämta resultat efter typ

Använd LEFT JOIN för att säkerställa att om relationstabeller inte har några data, kan vi fortfarande ha poster från huvudtabellen.

Referens:Förstå MySQL LEFT JOIN

Problem(er) :

  • Fel fältnamn :pr.interview_id = i.interview_id , bör det vara pr.interview_id = i.id eftersom vi inte har något intervju_id-fält i interviews tabell, skulle det vara id fält - baserat på din fråga.
  • pr.interview_id = i.id i where klausul :Om participant_rating tabellen inte har några register för en given intervju, kommer detta att leda till att den intervjun tas bort från resultatuppsättningen. Använd LEFT JOIN för participant_rating tabell.
  • sr.interview_id = i.id i where klausul :Om system_rating tabellen inte har några register för en given intervju, kommer detta att leda till att den intervjun tas bort från resultatuppsättningen. Använd LEFT JOIN för system_rating bord också.
  • Usage of AVG fungerar men fungerar inte för andra aggregatfunktioner som SUM, COUNT .. för om vi har en till många relationer så kommer join göra att det kommer att finnas flera poster för samma rad.

Lösning :

SELECT 
    i.id AS interview_id,
    i.candidate,  
    AVG(sr.rating) AS system_rating, 
    AVG(CASE WHEN pr.rater_type = 'Candidate' THEN pr.rating END) AS candidate_rating, 
    AVG(CASE WHEN pr.rater_type = 'Recruiter' THEN pr.rating END) AS recruiter_rating
FROM interviews i
LEFT JOIN system_rating sr ON sr.interview_id = i.id
LEFT JOIN participant_rating pr ON pr.interview_id = i.id
-- WHERE i.id IN (1, 2, 3) -- use whenever required
GROUP BY i.id



  1. .NET, C#, LINQ, SQL och OR-Mapping - jag förstår det bara inte :(

  2. Tvetydig kolumn i MySQL/Rails hitta metod

  3. Är användarna 'User'@'%' och 'User'@'localhost' inte samma sak?

  4. En Big Data Quandary:Hårdvara eller programvara ... Apparater ...