Maison >base de données >tutoriel mysql >Comment puis-je émuler un FULL JOIN dans MySQL en utilisant les LEFT et RIGHT JOIN ?

Comment puis-je émuler un FULL JOIN dans MySQL en utilisant les LEFT et RIGHT JOIN ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-16 08:38:02315parcourir

How Can I Emulate a FULL JOIN in MySQL Using LEFT and RIGHT JOINs?

Émuler MySQL FULL JOIN avec LEFT et RIGHT JOINS

MySQL ne prend pas en charge nativement les opérations FULL JOIN. Cependant, il est possible d'obtenir des résultats similaires en utilisant une combinaison de LEFT JOIN et RIGHT JOIN.

Comprendre le problème

L'objectif est de renvoyer un ensemble de résultats qui inclut tous les enregistrements des deux tables, Personnes et Commandes, même si les champs correspondants (P_Id) sont nuls dans l'un ou l'autre table.

Solution

Pour simuler un FULL JOIN, utilisez la requête suivante :

SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
LEFT JOIN
        Orders o
ON      p.P_Id = o.P_Id
UNION ALL
SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
RIGHT JOIN
        Orders o
ON      p.P_Id = o.P_Id
WHERE   p.P_Id IS NULL
ORDER BY
        p.LastName;

Explication

  • LEFT JOIN renvoie toutes les lignes de la table Personnes, y compris celles avec correspondance Valeurs P_Id dans la table Commandes et celles sans.
  • L'opération UNION ALL combine les résultats de LEFT JOIN avec les résultats de RIGHT JOIN, qui renvoie toutes les lignes de la table Commandes, y compris celles avec les valeurs P_Id correspondantes. dans la table Personnes et celles qui n'en ont pas.
  • La clause WHERE filtre toutes les lignes de la table Personnes qui ont un P_Id nul, garantissant que toutes les lignes de LEFT JOIN sont incluses.
  • La clause ORDER BY trie les résultats selon la colonne LastName.

Cette requête produit un ensemble de résultats identique à celui décrit dans l'énoncé du problème. :

LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678
Svendsen Tove 34764

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!

Déclaration:
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