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() ?
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>
Répartition :
SELECT
principale récupère toutes les colonnes (*
) de la table @Reviews
.SELECT
imbriquée effectue la concaténation. Il rejoint les tables @Users
et @Reviewers
en utilisant UserID
pour relier les utilisateurs aux avis.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).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>
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!