Sélection parmi plusieurs tables avec correspondance manquante dans MySQL
Pour interroger efficacement plusieurs tables, même dans les scénarios où toutes les lignes ne sont pas dans une seule table avoir des entrées correspondantes dans un autre, MySQL fournit le concept de jointures externes. Considérons le scénario d'une boutique en ligne avec des tableaux de catégories et de produits.
Supposons que nous souhaitions récupérer toutes les catégories et calculer les prix minimum et maximum pour chacune. Cependant, nous souhaitons inclure les catégories sans aucun produit et définir leurs prix minimum et maximum sur 0. La requête d'origine :
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc, products AS s WHERE s.ownerid=sc.id GROUP BY sc.id
Exclut les catégories sans produits en raison de la condition de jointure interne. Pour inclure toutes les catégories, nous utilisons un LEFT JOIN :
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
Le LEFT JOIN préserve toutes les lignes de la table des catégories (sc), permettant à la requête de récupérer toutes les catégories, y compris celles sans produits. La fonction IFNULL définit les valeurs nulles (qui se produisent lorsqu'il n'y a pas de produits correspondants) à 0, garantissant que minp et maxp sont toujours renvoyés avec une valeur valide.
Cette approche garantit que la requête récupère toutes les catégories, indépendamment de s'ils ont des produits correspondants, et il attribue correctement 0 pour les informations de prix manquantes.
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!