Maison >base de données >tutoriel mysql >Comment éliminer les lignes en double lors de la sélection parmi plusieurs tables dans MySQL ?

Comment éliminer les lignes en double lors de la sélection parmi plusieurs tables dans MySQL ?

DDD
DDDoriginal
2024-12-18 03:38:09443parcourir

How to Eliminate Duplicate Rows When Selecting from Multiple Tables in MySQL?

SELECT parmi plusieurs tables et gestion des doublons dans MySQL

Lors de la sélection parmi plusieurs tables, il est courant de rencontrer des lignes en double en raison de valeurs correspondantes dans la colonne de liaison. Dans ce scénario, vous devrez peut-être éliminer ces doublons tout en conservant des informations spécifiques.

Énoncé du problème :

La requête suivante récupère les informations des "drinks" et "drinks_photos " tables :

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

Cependant, pour chaque boisson, plusieurs entrées de photos apparaissent, ce qui entraîne des lignes en double. L'objectif est d'éliminer ces doublons et d'obtenir des lignes uniques contenant le nom, le prix et toutes les photos associées à chaque boisson.

Solution :

Pour résoudre ce problème et maintenir l'intégrité des données, nous pouvons utiliser des fonctions de regroupement et d'agrégation dans notre requête.

Regroupement et agrégation Fonctions :

  • GROUP BY : Regroupe les lignes qui ont la même valeur dans la ou les colonnes spécifiées.
  • Fonction d'agrégation : Une opération (par exemple, COUNT, MAX, MIN) effectuée sur un groupe de lignes pour récupérer un seul valeur.

Dans ce cas, nous pouvons regrouper par colonne "drinks_id" pour obtenir des lignes uniques pour chaque boisson.

Requête SQL :

Pour obtenir une seule ligne pour chaque boisson et conserver toutes les entrées de photos, nous pouvons utiliser ce qui suit query:

SELECT name, price, GROUP_CONCAT(photo SEPARATOR ',') AS all_photos
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
  • GROUP_CONCAT: Concatène les valeurs de la colonne spécifiée en une seule chaîne, séparées par un délimiteur spécifié (dans ce cas, une virgule).

Résultat :

Cette requête renvoie ce qui suit résultat :

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

Explication :

  • Chaque boisson n'a désormais qu'une seule ligne.
  • La colonne "all_photos" contient une virgule -liste séparée de toutes les entrées de photos associées au boire.

Remarque :

  • GROUP_CONCAT n'est pas une fonction d'agrégation SQL standardisée et son comportement peut varier selon les systèmes de base de données.
  • Si vous rencontrez des situations où il y a des virgules dans les noms de fichiers photo, vous devrez peut-être envisager des approches alternatives, telles que modifier la structure du tableau ou utiliser une fonction personnalisée sur le côté client pour diviser la chaîne concaténée.

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