Maison >base de données >tutoriel mysql >Comment effectuer efficacement un LEFT JOIN MySQL avec trois tables ?

Comment effectuer efficacement un LEFT JOIN MySQL avec trois tables ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-02 22:22:39621parcourir

How to Efficiently Perform a MySQL LEFT JOIN with Three Tables?

Comprendre MySQL LEFT JOIN avec trois tables

Description du problème

Considérez trois tables :

  • Personnes (PersonID, Nom, SS) : Contient des informations sur des individus.
  • Peurs (FearID, Fear) : répertorie différentes peurs.
  • Person_Fear (ID, PersonID, FearID) : relie les individus à leurs peurs associées.

L'objectif est d'afficher tous les individus ainsi que toutes les peurs qui leur sont associées (y compris les cas où une personne n'a aucune peur).

Analyse de la requête Problème

La requête fournie présente un schéma incorrect pour joindre des tables :

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 

La clause ON tente de manière incorrecte de joindre la table Person_Fear sur PersonID au lieu de FearID, qui est la colonne qui se connecte à Peurs.

Solution améliorée

Pour effectuer efficacement une jointure à gauche, considérez ce qui suit approche :

SELECT Persons.Name, Persons.SS, Fears.Fear
FROM Persons
LEFT JOIN Person_Fear
    INNER JOIN Fears
    ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID

Explication :

  • La table Personnes est jointe à Person_Fear sur Person_Fear.PersonID = Persons.PersonID.
  • Un INNER JOIN imbriqué connecte Person_Fear à Fears sur Person_Fear.FearID = Fears.FearID.
  • Cette structure garantit que tous les enregistrements de personnes sont inclus, même ceux sans craintes associées.

Requête alternative :

Une autre façon d'obtenir le même résultat est :

SELECT Persons.Name, Persons.SS, Fears.Fear
FROM Persons
LEFT JOIN Person_Fear ON Person_Fear.PersonID = Persons.PersonID
LEFT JOIN Fears ON Person_Fear.FearID = Fears.FearID

Cette requête utilise deux jointures gauches pour connecter les tables, produisant des résultats similaires.

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