Maison >base de données >tutoriel mysql >Comment puis-je éviter les lignes en double lors de la jointure de plusieurs tables dans des instructions SQL SELECT ?

Comment puis-je éviter les lignes en double lors de la jointure de plusieurs tables dans des instructions SQL SELECT ?

DDD
DDDoriginal
2024-12-05 21:19:14895parcourir

How Can I Avoid Duplicate Rows When Joining Multiple Tables in SQL SELECT Statements?

Éviter les résultats en double dans les instructions SELECT multi-tables : un guide complet

Lors de l'exécution d'instructions SELECT qui joignent des données de plusieurs tables, vous pouvez rencontrer des lignes en double, comme illustré dans le scénario fourni :

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

Cette requête récupère 5 lignes pour les boissons, avec photo comme seul champ unique. Cependant, le nom et le prix sont répétés, ce qui entraîne des lignes en double pour des boissons comme "fanta".

La solution : fonctions de regroupement et d'agrégation

Pour éliminer ces doublons, vous devez utiliser le regroupement et l'agrégation. fonctions. Le regroupement vous permet de combiner des lignes en fonction de valeurs communes, tandis que les fonctions d'agrégation vous permettent d'extraire une valeur spécifique pour chaque groupe.

Regroupement par boissons

Si vous souhaitez une seule ligne pour chaque boisson, quel que soit le nombre de photos qui y sont associées, vous pouvez regrouper par le Drinks_id :

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

Cette requête sera return :

name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg

Concaténation de photos avec GROUP_CONCAT

Si vous préférez avoir un tableau de photos pour chaque boisson, MySQL fournit la fonction GROUP_CONCAT, qui concatène les valeurs du même groupe :

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

Cette requête rendement :

name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg

Considérations

Notez que GROUP_CONCAT doit être utilisé avec prudence, car cela peut entraîner des problèmes de performances de la base de données ou renvoyer des chaînes excessivement grandes si les valeurs concaténées contiennent des virgules.

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