Membezakan Antara MySQL JOIN dan LEFT JOIN
Dalam konteks pertanyaan pangkalan data, memahami nuansa antara jenis gabungan berbeza adalah penting. Apabila menghadapi ralat seperti yang diterangkan, adalah penting untuk menyelidiki perbezaan antara JOIN biasa dan LEFT JOIN.
Jenis Sertai Lalai
Bertentangan dengan andaian anda, jenis join lalai dalam MySQL ialah INNER JOIN, bukan LEFT JOIN. Ini bermakna jika anda mengetepikan jenis gabungan, ia lalai kepada INNER JOIN.
Memahami Perbezaan
INNER JOIN, seperti yang digambarkan dalam ilustrasi visual, sepadan baris dengan nilai sepunya daripada jadual yang mengambil bahagian. Sebaliknya, LEFT JOIN merangkumi semua baris dari jadual kiri (dalam kes anda, DM_Server.Jobs) dan hanya baris yang sepadan dari jadual kanan. Jika tiada padanan, hasilnya termasuk nilai nol untuk data yang hilang.
Penyelesaian
Untuk mendapatkan gelagat yang diingini untuk mengembalikan semua baris dari jadual kiri, anda boleh secara eksplisit menggunakan LEFT JOIN:
SELECT `DM_Server`.`Jobs`.*, `DM_Server`.servers.Description AS server, digital_inventory.params, products.products_id, products.products_pdfupload, customers.customers_firstname, customers.customers_lastname FROM `DM_Server`.`Jobs` LEFT JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID LEFT JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name LEFT JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") LEFT JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Saya Mengembalikan Keputusan Lebih Sedikit Daripada Jangkaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!