首页 > 数据库 > mysql教程 > 如何使用 FOR XML PATH() 在 T-SQL 中连接多个记录中的用户名?

如何使用 FOR XML PATH() 在 T-SQL 中连接多个记录中的用户名?

Barbara Streisand
发布: 2025-01-15 06:58:42
原创
180 人浏览过

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

将 T-SQL 中的用户名与 FOR XML PATH() 有效组合

挑战:我们需要将多个记录中的用户名组合到一个复杂的数据库结构中,该数据库结构涉及多个具有多对多关系的表。 目标是显示两个表中的数据,同时连接第三个表中的名称,创建与每个评论关联的用户名字 (FName) 的逗号分隔列表。

解决方案:利用 FOR XML PATH()

FOR XML PATH() 方法为这个字符串连接任务提供了一个简洁的解决方案。 这是 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>
登录后复制

细分:

  • SELECT 语句从 * 表中检索所有列 (@Reviews)。
  • 嵌套的SELECT语句执行连接。 它使用 @Users 连接 @ReviewersUserID 表,将用户链接到评论。
  • WHERE 子句过滤用户,仅包含与当前评论相关的用户(匹配 ReviewID)。
  • FOR XML PATH('') 将连接的 FName 值转换为单个 XML 字符串,从而有效地创建逗号分隔的列表(需要处理尾随逗号,请参见下文)。
  • 结果分配给UserNames列。

输出和细化:

此查询生成所需的结果:每个评论的详细信息(ReviewID、ReviewDate 等)显示在以逗号分隔的关联用户名字列表旁边。 要删除尾随逗号,您可以使用 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>
登录后复制

此改进版本使用 ',' u.FName 在前面添加逗号,然后 STUFF 删除前导逗号,提供干净的逗号分隔的用户名列表。

以上是如何使用 FOR XML PATH() 在 T-SQL 中连接多个记录中的用户名?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板