Maison > base de données > tutoriel mysql > le corps du texte

Comment puis-je concaténer efficacement les valeurs de plusieurs lignes en une seule chaîne dans SQLite à l'aide de GROUP_CONCAT ?

Susan Sarandon
Libérer: 2024-11-04 18:57:01
original
1043 Les gens l'ont consulté

How can I efficiently concatenate values from multiple rows into a single string in SQLite using GROUP_CONCAT?

Comprendre GROUP_CONCAT dans SQLite

Lorsque vous traitez des schémas de bases de données relationnelles, il est souvent nécessaire de concaténer les valeurs de plusieurs lignes d'une table en une seule chaîne. Dans SQLite, la fonction GROUP_CONCAT fournit une solution puissante pour cette tâche.

Vos données et votre objectif

Considérez les exemples de données suivants, qui représentent les auteurs associés aux résumés :

1 A
1 B
1 C
1 D
2 E
2 F
3 G
3 H
3 I
3 J
3 K
Copier après la connexion

Vous souhaitez transformer ces données dans un format où chaque identifiant abstrait unique (_id) est associé à une liste séparée par des virgules des noms d'auteurs correspondants, comme ceci :

1 A,B,C,D
2 E,F
Copier après la connexion

Utilisation de GROUP_CONCAT avec des fonctions d'agrégation

La fonction GROUP_CONCAT, combinée avec des fonctions d'agrégation et une clause GROUP BY, peut réaliser cet objectif. Une approche courante consiste à créer une table intermédiaire à l’aide d’une sous-requête, comme vous l’avez initialement tenté. Cependant, vous avez manqué une étape cruciale.

La bonne approche

Pour utiliser correctement GROUP_CONCAT, effectuez les étapes suivantes :

  1. Rejoindre les tables : Utilisez les clauses JOIN pour établir des relations entre les tables impliquées, en vous assurant que les lignes sont correctement regroupées pour concaténation.
  2. Utilisez une fonction d'agrégation : Appliquez une fonction d'agrégation (par exemple, GROUP_CONCAT) pour combiner les valeurs des groupes en double identifiés par la clause GROUP BY.
  3. Clause GROUP BY : Incluez une clause GROUP BY après la clause FROM pour spécifier la ou les colonnes dans lesquelles regrouper les données. par.

Requête corrigée

Voici une requête corrigée qui suit ces principes :

SELECT ABSTRACTS_ITEM._id, GROUP_CONCAT(ABSTRACT_AUTHOR.NAME) AS GroupedName
FROM ABSTRACTS_ITEM 
JOIN AUTHORS_ABSTRACT ON ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
JOIN ABSTRACT_AUTHOR ON ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID
GROUP BY ABSTRACTS_ITEM._id;
Copier après la connexion

Requête alternative

Vous pouvez également utiliser l'approche de sous-requête comme vous l'avez initialement tenté, mais avec la syntaxe correcte :

SELECT ID,
GROUP_CONCAT(NAME) 
FROM
    (select ABSTRACTS_ITEM._id AS ID,
     Name
     from
    ABSTRACTS_ITEM , ABSTRACT_AUTHOR , AUTHORS_ABSTRACT
    where
    ABSTRACTS_ITEM._id = AUTHORS_ABSTRACT.ABSTRACTSITEM_ID
    and
    ABSTRACT_AUTHOR._id = AUTHORS_ABSTRACT.ABSTRACTAUTHOR_ID)
GROUP BY ID;
Copier après la connexion

Les deux requêtes concatèneront avec succès les noms d'auteur pour chaque ID de résumé, fournissant le format de sortie souhaité.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal