sql >> Database teknologi >  >> RDS >> Mysql

Hvordan man tilslutter sig har mange relationstabeller og hent resultat efter type

Brug LEFT JOIN for at sikre, at hvis relationstabeller ikke har nogen data, kan vi stadig have poster fra hovedtabellen.

Reference:Forstå MySQL LEFT JOIN

Problem(er) :

  • Forkert feltnavn :pr.interview_id = i.interview_id , skal det være pr.interview_id = i.id da vi ikke har noget interview_id felt i interviews tabel, ville det være id felt - baseret på din forespørgsel.
  • pr.interview_id = i.id i where klausul :Hvis participant_rating tabel ikke har nogen registreringer for et givet interview, vil dette medføre, at det pågældende interview fjernes fra resultatsættet. Brug LEFT JOIN for participant_rating tabel.
  • sr.interview_id = i.id i where klausul :Hvis system_rating tabel ikke har nogen registreringer for et givet interview, vil dette medføre, at det pågældende interview fjernes fra resultatsættet. Brug LEFT JOIN for system_rating også bord.
  • Usage of AVG virker, men virker ikke for andre aggregatfunktioner som SUM, COUNT .. fordi hvis vi har et til mange forhold, så vil join bevirke, at der vil være flere poster for den samme række.

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. hvordan får man start- og slutdatoerne for alle uger mellem to datoer i SQL server?

  2. Er InnoDB-sortering virkelig SÅ langsom?

  3. Sådan sletter du dubletter i MySQL-tabel

  4. hvad er den bedste software til at tegne ERD til en mysql-database til Windows