Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara bergabung memiliki banyak tabel relasi dan mengambil hasil berdasarkan jenis

Gunakan LEFT JOIN untuk memastikan jika tabel relasi tidak memiliki data apapun, kita tetap dapat memiliki record dari tabel utama.

Referensi:Memahami MySQL LEFT JOIN

Masalah :

  • Nama bidang salah :pr.interview_id = i.interview_id , seharusnya pr.interview_id = i.id karena kami tidak memiliki kolom interview_id di interviews tabel, itu akan menjadi id bidang - berdasarkan kueri Anda.
  • pr.interview_id = i.id di where klausa :Jika participant_rating tabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. Gunakan LEFT JOIN untuk participant_rating meja.
  • sr.interview_id = i.id di where klausa :Jika system_rating tabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. Gunakan LEFT JOIN untuk system_rating meja juga.
  • Usage of AVG berfungsi tetapi tidak akan berfungsi untuk fungsi agregat lainnya seperti SUM, COUNT .. karena jika kita memiliki relasi one to many maka join akan membuat akan ada beberapa record untuk baris yang sama.

Solusi :

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. Laravel/ PHP:Diurutkan Berdasarkan Abjad dengan nomor berurutan

  2. Apa yang salah dengan prosedur tersimpan ini?

  3. Menemukan pengguna unik dari nilai yang ditautkan

  4. SQL:Bagaimana kita bisa membuat tabel1 BERGABUNG dengan tabel2 PADA tabel yang diberikan dalam bidang di tabel1?

  5. Abaikan entri duplikat dan komit entri yang berhasil di DbContext.SaveChanges() di EF Core