Sélection parmi deux tables avec des lignes inégales dans MySQL
Dans une base de données d'achats en ligne avec deux tables - catégories et produits - une tâche courante est pour récupérer toutes les catégories ainsi que les prix minimum et maximum des produits dans chaque catégorie. Cependant, une requête simple rencontre un problème : les catégories sans produits sont exclues des résultats.
Pour relever ce défi, il est nécessaire d'utiliser une jointure externe au lieu d'une jointure implicite. Une jointure externe permet de récupérer les lignes d'une table (dans ce cas, les catégories) même s'il n'y a pas de lignes correspondantes dans l'autre table (produits). Plus précisément, une jointure gauche est utilisée ici, afin que toutes les catégories soient incluses dans les résultats.
De plus, pour remplacer les valeurs nulles par 0 pour les catégories sans produits, la fonction IFNULL() est utilisée. Cette fonction prend la valeur de l'expression fournie dans le premier argument, et si elle est nulle, renvoie à la place la valeur spécifiée dans le deuxième argument.
La syntaxe de requête mise à jour est la suivante :
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
En utilisant une jointure externe et la fonction IFNULL(), nous pouvons récupérer toutes les catégories et garantir que les catégories sans produits sont représentées avec des valeurs minp et maxp de 0. Cette requête gère efficacement la nécessité de sélectionner parmi deux tables même lorsque toutes les lignes d'une table n'ont pas d'entrées correspondantes dans l'autre.
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!