Maison >base de données >tutoriel mysql >Comment gérer les lignes en double lors de l'utilisation de SELECT DISTINCT avec plusieurs tables dans MySQL ?

Comment gérer les lignes en double lors de l'utilisation de SELECT DISTINCT avec plusieurs tables dans MySQL ?

DDD
DDDoriginal
2024-12-08 19:17:10431parcourir

How to Handle Duplicate Rows When Using SELECT DISTINCT with Multiple Tables in MySQL?

SELECT DISTINCT avec plusieurs tables dans MySQL

Dans la requête MySQL, vous utilisez une jointure implicite entre les tables boissons et boissons_photos sans toutes les conditions de la clause WHERE. Cela donne un produit cartésien, donnant cinq lignes avec des valeurs répétées pour le nom et le prix. Pour éliminer ces doublons, vous pouvez utiliser la clause SELECT DISTINCT.

Cependant, si vous souhaitez conserver toutes les photos de chaque boisson, vous ne pouvez pas simplement utiliser SELECT DISTINCT car elle ne renvoie que des lignes distinctes. Au lieu de cela, vous devez utiliser une combinaison de fonctions de regroupement et d'agrégation.

Fonctions de regroupement et d'agrégation

Le regroupement agrège les lignes en fonction d'une ou plusieurs colonnes spécifiées. Dans ce cas, vous souhaitez regrouper les résultats par boissons_id pour obtenir une ligne par boisson. Vous pouvez ensuite utiliser une fonction d'agrégation pour sélectionner la valeur souhaitée pour chaque résultat groupé.

Par exemple, pour récupérer la première photo de chaque boisson, vous pouvez utiliser :

SELECT name, price, MIN(photo) AS photo
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

Le MIN () la fonction d'agrégation renvoie la valeur minimale de la colonne photo pour chaque group.

GROUP_CONCAT

Alternativement, si vous souhaitez concaténer toutes les photos de chaque boisson en une seule chaîne, vous pouvez utiliser la fonction GROUP_CONCAT() :

SELECT name, price, GROUP_CONCAT(photo, ',') AS photos
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

Cependant, notez que GROUP_CONCAT() n'est pas une fonction d'agrégation SQL standard et que son utilisation peut varier selon les différents paramètres. bases de 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!

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