Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да се присъедините има много таблици за връзки и извличане на резултат по тип

Използвайте LEFT JOIN за да сме сигурни, че таблиците на релациите нямат никакви данни, все пак можем да имаме записи от основната таблица.

Справка:Разбиране на MySQL LEFT JOIN

Проблем(и) :

  • Грешно име на поле :pr.interview_id = i.interview_id , трябва да бъде pr.interview_id = i.id тъй като нямаме поле interview_id в interviews таблица, това ще бъде id поле - въз основа на вашата заявка.
  • pr.interview_id = i.id в where клаузата :Ако participant_rating таблицата няма записи за дадено интервю, това ще доведе до премахването на това интервю от набора от резултати. Използвайте LEFT JOIN за participant_rating маса.
  • sr.interview_id = i.id в where клаузата :Ако system_rating таблицата няма записи за дадено интервю, това ще доведе до премахването на това интервю от набора от резултати. Използвайте LEFT JOIN за system_rating маса също.
  • Usage of AVG работи, но няма да работи за други агрегатни функции като SUM, COUNT .. защото ако имаме една към много връзки, тогава присъединяването ще направи, че ще има множество записи за един и същи ред.

Решение :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свойството ConnectionString не е инициализирана грешка

  2. Как да форматирам времето в "2:34 часа", "0:34 часа" и т.н. в MySQL

  3. Как мога да отпечатам SQL заявката, изпълнена след като DBI на Perl попълни заместителите?

  4. MYSQL:COUNT с GROUP BY, LEFT JOIN и клаузата WHERE не връща нулеви стойности

  5. Как да поправите грешка при изпълнение на DDL промени в таблицата, изпускане на външния ключ FKg0mkvgsqn8584qoql6a2rxheq чрез JDBC изявление