區分 MySQL JOIN 和 LEFT JOIN
在資料庫查詢的上下文中,了解不同連結類型之間的細微差別至關重要。當遇到上述錯誤時,深入研究常規 JOIN 和 LEFT JOIN 之間的差異非常重要。
預設聯接類型
與您的假設相反, MySQL 中預設的連接類型是 INNER JOIN,而不是 LEFT JOIN。這意味著,如果您省略指定連接類型,則預設為 INNER JOIN。
了解差異
INNER JOIN,如可視化插圖所示,匹配具有來自參與表的共同值的行。相反,LEFT JOIN 包含左表(在您的範例中為 DM_Server.Jobs)中的所有行,並且僅包含右表中的符合行。如果沒有匹配項,結果將包含缺失資料的空值。
解決方案
要獲得從左表返回所有行的所需行為,您可以明確使用 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
以上是為什麼我的 MySQL 查詢回傳的結果比預期少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!