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 ?
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".
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.
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 |
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 |
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!