首頁 >資料庫 >mysql教程 >如何使用 FOR XML PATH() 在 T-SQL 中連接多個記錄中的使用者名稱?

如何使用 FOR XML PATH() 在 T-SQL 中連接多個記錄中的使用者名稱?

Barbara Streisand
Barbara Streisand原創
2025-01-15 06:58:42182瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn