Heim >Datenbank >MySQL-Tutorial >Wie teile ich eine Postgres-Spalte in mehrere Zeilen auf?

Wie teile ich eine Postgres-Spalte in mehrere Zeilen auf?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-06 21:43:48734Durchsuche

How to Split a Postgres Column into Multiple Rows?

Spalte in mehrere Zeilen in Postgres aufteilen

Problemstellung

Betrachten Sie die folgende Postgres-Tabelle:

subject |  flag
---------+------
this is a test | 2

Das Ziel besteht darin, diese Tabelle in eine neue Tabelle umzuwandeln, wobei jedes Wort in der Spalte „Betreff“ eine neue Zeile ist, während das entsprechende Wort erhalten bleibt „Flag“-Wert.

Lösung

Eine effektive Möglichkeit, dies in Postgres zu erreichen, ist die Verwendung eines LATERAL-Joins in Verbindung mit string_to_table() (verfügbar in Postgres 14). Dadurch können wir die Spalte „Betreff“ in einzelne Token aufteilen und diese mit der Originaltabelle verbinden.

Die folgende Abfrage führt diese Transformation durch:

SELECT token, flag
FROM tbl, string_to_table(subject, ' ') AS token
WHERE flag = 2;

In dieser Abfrage verwenden wir die LATERAL-Join, um eine Reihe von Zeilen für jedes Token in der Spalte „Betreff“ zu generieren, und wir filtern die Ergebnisse basierend auf der angegebenen „Flagge“. value.

Alternative Ansätze

Für Postgres 13 und früher kann unnest(string_to_array(subject, ' ')) anstelle von string_to_table(subject, ' ') verwendet werden. .

Ein anderer Ansatz besteht darin, die Funktion regexp_split_to_table() zu verwenden, die Folgendes ermöglicht flexiblere Tokenisierung basierend auf regulären Ausdrücken. Dieser Ansatz ist jedoch im Allgemeinen langsamer als die Verwendung von string_to_table().

Das obige ist der detaillierte Inhalt vonWie teile ich eine Postgres-Spalte in mehrere Zeilen auf?. 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