区分 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中文网其他相关文章!