Heim >Datenbank >MySQL-Tutorial >Wie verkette ich Benutzernamen aus mehreren Datensätzen in T-SQL mithilfe von FOR XML PATH()?

Wie verkette ich Benutzernamen aus mehreren Datensätzen in T-SQL mithilfe von FOR XML PATH()?

Barbara Streisand
Barbara StreisandOriginal
2025-01-15 06:58:42206Durchsuche

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

Effizientes Kombinieren von Benutzernamen in T-SQL mit FOR XML PATH()

Herausforderung: Wir müssen Benutzernamen aus mehreren Datensätzen innerhalb einer komplexen Datenbankstruktur kombinieren, die mehrere Tabellen mit Viele-zu-Viele-Beziehungen umfasst. Das Ziel besteht darin, Daten aus zwei Tabellen anzuzeigen und gleichzeitig Namen aus einer dritten zu verketten, wodurch eine durch Kommas getrennte Liste von Benutzervornamen (FName) erstellt wird, die jeder Bewertung zugeordnet sind.

Lösung: Nutzung von FOR XML PATH()

Die FOR XML PATH()-Methode bietet eine prägnante Lösung für diese Zeichenfolgenverkettungsaufgabe. Hier ist der T-SQL-Code:

<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>

Aufschlüsselung:

  • Die Hauptanweisung SELECT ruft alle Spalten (*) aus der Tabelle @Reviews ab.
  • Die verschachtelte SELECT-Anweisung führt die Verkettung durch. Es verbindet die Tabellen @Users und @Reviewers mit UserID, um Benutzer mit Bewertungen zu verknüpfen.
  • Die WHERE-Klausel filtert die Benutzer, sodass nur diejenigen einbezogen werden, die mit der aktuellen Bewertung verknüpft sind (übereinstimmend mit ReviewID).
  • FOR XML PATH('') konvertiert die verketteten FName-Werte in eine einzelne XML-Zeichenfolge und erstellt so effektiv eine durch Kommas getrennte Liste (das abschließende Komma muss behandelt werden, siehe unten).
  • Das Ergebnis wird der Spalte UserNames zugeordnet.

Ausgabe und Verfeinerung:

Diese Abfrage generiert das gewünschte Ergebnis: Die Details jeder Bewertung (Bewertungs-ID, Bewertungsdatum usw.) werden zusammen mit einer durch Kommas getrennten Liste der zugehörigen Vornamen der Benutzer angezeigt. Um das abschließende Komma zu entfernen, können Sie eine STUFF-Funktion verwenden:

<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>

Diese verbesserte Version verwendet ',' u.FName, um ein Komma voranzustellen, und entfernt dann STUFF das führende Komma, wodurch eine saubere, durch Kommas getrennte Liste von Benutzernamen bereitgestellt wird.

Das obige ist der detaillierte Inhalt vonWie verkette ich Benutzernamen aus mehreren Datensätzen in T-SQL mithilfe von FOR XML PATH()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn