Maison >base de données >tutoriel mysql >Comment éviter les lignes en double lors de la jointure de plusieurs tables dans MySQL ?

Comment éviter les lignes en double lors de la jointure de plusieurs tables dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 07:14:14792parcourir

How to Avoid Duplicate Rows When Joining Multiple Tables in MySQL?

JOIN avec plusieurs tables dans MySQL

Problème :
Lors de la sélection de données de plusieurs tables dans MySQL à l'aide d'un simple JOIN sans spécifier aucun Dans certaines conditions, cela peut entraîner des lignes en double en raison de la jointure de plusieurs lignes pour chaque clé correspondante. Comment pouvons-nous éliminer ces doublons et récupérer des lignes uniques pour chaque boisson, y compris toutes les photos associées ?

Solution :
Pour résoudre ce problème, nous devons utiliser des fonctions de regroupement et d'agrégation pour combinez les lignes en double et sélectionnez-en la valeur souhaitée.

Tout d'abord, nous regroupons les lignes par Drinks_id pour obtenir une seule ligne pour chacune. boisson :

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

Cette approche renverra une ligne par boisson avec une seule photo. Pour inclure toutes les photos associées, nous pouvons utiliser la fonction GROUP_CONCAT pour concaténer les noms de fichiers photos en une seule chaîne :

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

Cette requête générera un tableau avec des lignes de boissons uniques et une chaîne concaténée contenant toutes les photos associées. noms de fichiers photo pour chaque boisson.

Notez que GROUP_CONCAT est une fonction spécifique à MySQL et peut ne pas être prise en charge dans d'autres systèmes de bases de données. Dans de tels cas, des approches alternatives, telles que des sous-requêtes ou des types de données tableau, peuvent devoir être envisagé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