Postgres で列を複数の行に分割する
テキストを含む列と整数フラグを含む別の列を持つテーブルがある場合、対応するフラグ値を維持しながら、テキスト列の各単語が新しいテーブルの個別の行になる新しい形式にテーブルを変換する必要があります。この記事では、Postgres を使用してこれを実現する方法について説明します。
1 つの効果的な方法は、Postgres 14 以降の string_to_table() 関数と LATERAL 結合を組み合わせて利用することです。 LATERAL キーワードは結合に適用され、親テーブルの各行に対して複数の行を返す集合を返す関数 (SRF) を作成します。 string_to_table() 関数は、テキスト列を個々の単語に分割し、単語ごとに新しい行を作成します。
たとえば、次のクエリを考えてみましょう。
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
このクエリは LATERAL 結合を実行します。 tbl テーブルと SRF string_to_table(subject, ' ') の間で、空白で分割することでサブジェクト列をトークン化します。 WHERE 句は、フラグ列が 2 に等しい行を含むように結果をフィルタリングします。その結果、出力テーブルには、対象列の単語ごとに 1 行が含まれ、対応するフラグ値が含まれます。
In Postgres 13 以前では、string_to_table(subject, ' ') の代わりに unnest(string_to_array(subject, ' ')) を使用できます。
以上がPostgresでテキストの列を複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。