Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dołączyć ma wiele tabel relacji i pobierać wyniki według typu

Użyj LEFT JOIN aby upewnić się, że tabele relacji nie zawierają żadnych danych, nadal możemy mieć rekordy z tabeli głównej.

Odniesienie:Zrozumienie MySQL LEFT JOIN

Problemy :

  • Niewłaściwa nazwa pola :pr.interview_id = i.interview_id , powinno być pr.interview_id = i.id ponieważ nie mamy żadnego pola interview_id w interviews tabeli, byłoby to id pole - na podstawie Twojego zapytania.
  • pr.interview_id = i.id w where klauzula :Jeśli participant_rating tabela nie posiada rekordów dla danego wywiadu, spowoduje to usunięcie tego wywiadu ze zbioru wyników. Użyj LEFT JOIN dla participant_rating stół.
  • sr.interview_id = i.id w where klauzula :Jeśli system_rating tabela nie posiada rekordów dla danego wywiadu, spowoduje to usunięcie tego wywiadu ze zbioru wyników. Użyj LEFT JOIN dla system_rating stół też.
  • Usage of AVG działa, ale nie działa w przypadku innych funkcji agregujących, takich jak SUM, COUNT .. ponieważ jeśli mamy jeden do wielu relacji, to join sprawi, że będzie wiele rekordów dla tego samego wiersza.

Rozwiązanie :

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. MySQL — organizowanie zawartości bazy danych (liga sportowa)

  2. Jak poprawnie wstawić znaki UTF-8 do tabeli MySQL za pomocą Pythona?

  3. pymysql fetchall() wyniki jako słownik?

  4. Jak w złączeniu poprzedzić wszystkie nazwy kolumn tabelą, z której pochodzi?

  5. Grupa MySQL według identyfikatora i ostatniej daty