Récupération de données de plusieurs tables avec une jointure externe facultative dans MySQL
Lors de l'interrogation de données de plusieurs tables, il est courant de rencontrer des situations où toutes ne les lignes d'un tableau ont des lignes correspondantes dans un autre. Dans de tels cas, il est souhaitable de récupérer toutes les lignes d'une table tout en remplissant les données manquantes avec des espaces réservés.
Considérez le scénario suivant : vous disposez de deux tables, une pour les catégories (intitulée "catégories") et une pour les produits. (intitulé « produits »). La table "products" comporte une colonne "ownerid" qui fait référence à la colonne "id" dans la table "categories".
Exemple de requête
Pour sélectionner toutes les catégories et les prix minimum et maximum pour chacun, vous pouvez utiliser la requête suivante :
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Extérieur Join
La modification clé ici est l'utilisation de l'instruction LEFT JOIN. Contrairement à un INNER JOIN, qui renvoie uniquement les lignes qui répondent à la condition de jointure, un OUTER JOIN renvoie toutes les lignes de la table de gauche (dans ce cas, « catégories ») et remplit les valeurs manquantes de la table de droite (« produits ») avec NULL. .
Gestion des valeurs NULL
Cependant, les valeurs NULL peuvent être indésirables dans certains scénarios. Pour renvoyer une valeur par défaut (comme 0) au lieu de NULL pour les catégories sans produits, vous pouvez utiliser la fonction IFNULL :
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Considérations
Enfin, c'est Il est important de décider s'il faut utiliser NULL ou une valeur par défaut pour les données manquantes, en fonction des exigences spécifiques de votre application. Les valeurs nulles indiquent qu'aucune donnée n'est réellement présente, tandis que les valeurs par défaut représentent des données supposées. Comprendre cette distinction est crucial pour maintenir l’intégrité des données.
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!