web-dev-qa-db-fra.com

Différence entre MySQL JOIN et LEFT JOIN

J'ai cette requête inter-base de données ...

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`
        INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID
        JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name
        JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf")
        JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID
        ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50

ça fonctionne bien jusqu'à ce que je les fasse LEFT JOINs. Je pensais qu'en ne spécifiant pas un type de jointure, on supposait qu'il s'agissait d'un LEFT JOIN. Ce n'est pas le cas?

63
Webnet

Je pensais qu'en ne spécifiant pas un type de jointure, il était supposé être un LEFT JOIN. Ce n'est pas le cas?

Non, la jointure par défaut est INNER JOIN.

Voici ne explication visuelle des jointures SQL .

Jointure interne

enter image description here

Rejoindre à gauche

enter image description here

168
Mark Byers

Non. Lorsqu'un type n'est pas spécifié, un INNER JOIN est utilisé. Lire sur les différences; wikipedia

13
rael_kid

Je crois que le défaut est INNER JOIN _ si vous spécifiez simplement JOIN.

10
Flash

Si vous venez de mentionner JOIN dans requête par défaut, cela sera considéré comme INNER JOIN.

Jointure à gauche: La jointure à gauche prend tous les éléments de la table de gauche et uniquement les enregistrements correspondants de la table de droite comme suit. Exemple:

SELECT column_name(s)
FROM table_name1 #(Left table)
LEFT JOIN table_name2 #(Right table)
ON table_name1.column_name=table_name2.column_name

J'espère que cela t'aides.

8
Java