Distinction entre MySQL JOIN et LEFT JOIN
Dans le contexte des requêtes de base de données, comprendre les nuances entre les différents types de jointure est crucial. Lorsque vous rencontrez des erreurs comme celle décrite, il est important d'examiner les différences entre un JOIN normal et un LEFT JOIN.
Type de jointure par défaut
Contrairement à votre hypothèse, le type de jointure par défaut dans MySQL est INNER JOIN, pas LEFT JOIN. Cela signifie que si vous omettez de spécifier un type de jointure, la valeur par défaut est INNER JOIN.
Comprendre la différence
Une INNER JOIN, telle que représentée dans l'illustration visuelle, correspond lignes avec des valeurs communes des tables participantes. En revanche, un LEFT JOIN inclut toutes les lignes de la table de gauche (dans votre cas, DM_Server.Jobs) et uniquement les lignes correspondantes de la table de droite. S'il n'y a aucune correspondance, le résultat inclut des valeurs nulles pour les données manquantes.
Solution
Pour obtenir le comportement souhaité consistant à renvoyer toutes les lignes du tableau de gauche, vous peut explicitement utiliser un 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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!