Maison > base de données > tutoriel mysql > Un INNER JOIN après un OUTER JOIN annule-t-il l'effet de l'OUTER JOIN ?

Un INNER JOIN après un OUTER JOIN annule-t-il l'effet de l'OUTER JOIN ?

DDD
Libérer: 2025-01-09 10:41:41
original
433 Les gens l'ont consulté

Does an INNER JOIN After an OUTER JOIN Negate the OUTER JOIN's Effect?

Jointures SQL imbriquées : INNER JOIN et OUTER JOIN

Est-ce qu'un INNER JOIN suivant un OUTER JOIN annule l'effet du OUTER JOIN ? Et les INNER JOINs devraient-ils toujours précéder les OUTER JOINs dans les requêtes à jointures multiples ?

La réponse est nuancée. Un INNER JOIN ultérieur n'annulera le OUTER JOIN que si sa clause ON nécessite la présence de colonnes qui pourraient être NULL dues au OUTER JOIN. Réorganiser simplement les jointures ne résoudra pas ce problème ; vous devrez remplacer le INNER JOIN par un OUTER JOIN approprié.

Illustrons :

Exemple 1 (la réorganisation n'a pas d'importance) :

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN email
  ON person.email_id = email.id</code>
Copier après la connexion

Ici, réorganiser les jointures ne modifiera pas les résultats.

Exemple 2 (questions de réorganisation) :

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN city
  ON address.city_id = city.id</code>
Copier après la connexion

La deuxième clause ON nécessite un non-NULL address.city_id. Cela va à l'encontre du LEFT OUTER JOIN, en filtrant les person enregistrements sans correspondance city via address. Pour corriger cela, remplacez le INNER JOIN par un LEFT OUTER JOIN.

Bonnes pratiques :

Bien que cela ne soit pas strictement obligatoire, il est généralement recommandé de placer les INNER JOIN avant les OUTER JOIN. Cela améliore la lisibilité et clarifie les conditions essentielles de filtrage de la requête. De plus, les RIGHT OUTER JOIN sont souvent moins préférés et peuvent généralement être réécrits en utilisant des LEFT OUTER JOIN pour une meilleure clarté et une meilleure maintenabilité.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal