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

Menggunakan gabungan dengan tiga tabel saat bidang mungkin nol

Anda melakukan INNER JOIN, tetapi Anda memerlukan OUTER JOIN, khususnya, LEFT JOIN. Dengan LEFT JOIN, tabel "di sebelah kiri" selalu digabungkan, dan jika tidak ada korespondensi, bidang tabel di sebelah kanan disetel ke nol. Perbedaannya dijelaskan dengan sangat baik di halaman wikipedia ini .

Kemudian Anda harus mengelompokkan baris dengan id kiriman yang sama dan menghitung berapa banyak baris yang telah dikelompokkan, berhati-hatilah jika satu kiriman hanya memiliki satu komentar dan yang lain tidak memiliki keduanya memiliki 1 baris yang dikelompokkan ... Jika satu kiriman tidak memiliki komentar , dalam kueri berikutnya c.submissionid akan menjadi nol, jadi

SQL Anda bisa menjadi

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Mungkin ada kesalahan, saya belum menguji kuerinya... Tapi saya berharap dapat memberi Anda ide yang tepat, yaitu perbedaan antara gabungan luar dan gabungan dalam.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beberapa GROUP_CONCAT di berbagai bidang menggunakan MySQL

  2. Mengunggah file/gambar blob ke Mysql

  3. Pilih catatan berdasarkan waktu dalam interval antara 12:00:00 dan 18:00:00 setiap hari

  4. Untuk contoh loop di MySQL

  5. Hapus semua baris dengan stempel waktu yang lebih lama dari x hari