Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Nama Pengguna daripada Berbilang Rekod dalam T-SQL Menggunakan FOR XML PATH()?

Bagaimana untuk Menggabungkan Nama Pengguna daripada Berbilang Rekod dalam T-SQL Menggunakan FOR XML PATH()?

Barbara Streisand
Barbara Streisandasal
2025-01-15 06:58:42186semak imbas

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

Menggabungkan Nama Pengguna dalam T-SQL dengan cekap dengan FOR XML PATH()

Cabaran: Kita perlu menggabungkan nama pengguna daripada berbilang rekod dalam struktur pangkalan data yang kompleks yang melibatkan berbilang jadual dengan perhubungan banyak-ke-banyak. Objektifnya ialah untuk memaparkan data daripada dua jadual sambil menggabungkan nama daripada satu pertiga, mencipta senarai nama pertama pengguna (FName) yang dipisahkan koma yang dikaitkan dengan setiap ulasan.

Penyelesaian: Memanfaatkan UNTUK LALUAN XML()

Kaedah FOR XML PATH() menawarkan penyelesaian ringkas untuk tugas penggabungan rentetan ini. Berikut ialah kod 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>

Pecahan:

  • Pernyataan SELECT utama mendapatkan semula semua lajur (*) daripada jadual @Reviews.
  • Pernyataan SELECT bersarang melakukan penyambungan. Ia menyertai jadual @Users dan @Reviewers menggunakan UserID untuk memautkan pengguna kepada ulasan.
  • Klausa WHERE menapis pengguna untuk memasukkan hanya yang dikaitkan dengan semakan semasa (padanan ReviewID).
  • FOR XML PATH('') menukarkan nilai FName yang digabungkan menjadi rentetan XML tunggal, dengan berkesan mencipta senarai dipisahkan koma (koma di belakang perlu dikendalikan, lihat di bawah).
  • Hasilnya diberikan pada lajur UserNames.

Output dan Penambahbaikan:

Pertanyaan ini menjana hasil yang diingini: setiap butiran ulasan (ReviewID, ReviewDate, dll.) dipaparkan bersama senarai nama pertama pengguna yang dipisahkan koma. Untuk mengalih keluar koma di belakang, anda boleh menggunakan fungsi 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>

Versi yang dipertingkat ini menggunakan ',' u.FName untuk menambahkan koma, dan kemudian STUFF mengalih keluar koma utama, menyediakan senarai nama pengguna yang dipisahkan koma yang bersih.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Nama Pengguna daripada Berbilang Rekod dalam T-SQL Menggunakan FOR XML PATH()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn