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:
SELECT
utama mendapatkan semula semua lajur (*
) daripada jadual @Reviews
.SELECT
bersarang melakukan penyambungan. Ia menyertai jadual @Users
dan @Reviewers
menggunakan UserID
untuk memautkan pengguna kepada ulasan.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).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!