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:
SELECT
ruft alle Spalten (*
) aus der Tabelle @Reviews
ab.SELECT
-Anweisung führt die Verkettung durch. Es verbindet die Tabellen @Users
und @Reviewers
mit UserID
, um Benutzer mit Bewertungen zu verknüpfen.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).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!