Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi ma requête MySQL renvoie-t-elle moins de résultats que prévu ?

Linda Hamilton
Libérer: 2024-11-26 02:46:10
original
159 Les gens l'ont consulté

Why is My MySQL Query Returning Fewer Results Than Expected?

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal