Maison > base de données > tutoriel mysql > Comment concaténer des noms d'utilisateur de plusieurs enregistrements dans T-SQL à l'aide de FOR XML PATH() ?

Comment concaténer des noms d'utilisateur de plusieurs enregistrements dans T-SQL à l'aide de FOR XML PATH() ?

Barbara Streisand
Libérer: 2025-01-15 06:58:42
original
186 Les gens l'ont consulté

How to Concatenate User Names from Multiple Records in T-SQL Using FOR XML PATH()?

Combiner efficacement les noms d'utilisateur dans T-SQL avec FOR XML PATH()

Défi : Nous devons combiner les noms d'utilisateur de plusieurs enregistrements au sein d'une structure de base de données complexe impliquant plusieurs tables avec des relations plusieurs-à-plusieurs. L'objectif est d'afficher les données de deux tables tout en concaténant les noms d'une troisième, créant ainsi une liste de prénoms d'utilisateurs (FName) séparés par des virgules et associés à chaque avis.

Solution : exploiter FOR XML PATH()

La méthode FOR XML PATH() offre une solution concise pour cette tâche de concaténation de chaînes. Voici le code T-SQL :

<code class="language-sql">SELECT  *,
        ( 
            SELECT  u.FName + ','
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ) AS UserNames
FROM    @Reviews r</code>
Copier après la connexion

Répartition :

  • L'instruction SELECT principale récupère toutes les colonnes (*) de la table @Reviews.
  • L'instruction SELECT imbriquée effectue la concaténation. Il rejoint les tables @Users et @Reviewers en utilisant UserID pour relier les utilisateurs aux avis.
  • La clause WHERE filtre les utilisateurs pour inclure uniquement ceux associés à l'avis en cours (correspondant à ReviewID).
  • FOR XML PATH('') convertit les valeurs FName concaténées en une seule chaîne XML, créant ainsi une liste séparée par des virgules (la virgule finale devra être gérée, voir ci-dessous).
  • Le résultat est affecté à la colonne UserNames.

Sortie et raffinement :

Cette requête génère le résultat souhaité : les détails de chaque avis (ReviewID, ReviewDate, etc.) sont affichés à côté d'une liste de prénoms d'utilisateurs associés, séparés par des virgules. Pour supprimer la virgule de fin, vous pouvez utiliser une fonction STUFF :

<code class="language-sql">SELECT  *,
        STUFF(( 
            SELECT  ',' + u.FName
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ), 1, 1, '') AS UserNames
FROM    @Reviews r</code>
Copier après la connexion

Cette version améliorée utilise ',' u.FName pour ajouter une virgule, puis STUFF supprime la virgule de début, fournissant ainsi une liste claire de noms d'utilisateurs séparés par 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!

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