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
Libérer: 2025-01-02 22:22:39
original
613 Les gens l'ont consulté

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

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

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

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!

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