挑战:我们需要将多个记录中的用户名组合到一个复杂的数据库结构中,该数据库结构涉及多个具有多对多关系的表。 目标是显示两个表中的数据,同时连接第三个表中的名称,创建与每个评论关联的用户名字 (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
连接 @Reviewers
和 UserID
表,将用户链接到评论。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中文网其他相关文章!