ホームページ > データベース > mysql チュートリアル > PostgreSQLで列を複数の行に分割するにはどうすればよいですか?

PostgreSQLで列を複数の行に分割するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-06 21:54:44
オリジナル
756 人が閲覧しました

How to Split a Column into Multiple Rows in PostgreSQL?

Postgres で列を複数の行に分割する

次のような複数の値を含む列を持つテーブルがあるとします。

subject | flag
--------+-----
this is a test | 2
ログイン後にコピー

このテーブルを、元の列の各値が個別になる新しい構造に変換する必要がある場合があります。次のような行:

token   | flag
--------+-----
this    | 2
is      | 2
a       | 2
test    | 2
ログイン後にコピー

LATERAL Join を使用したソリューション (Postgres 14)

Postgres 14 以降では、次の LATERAL Join を使用してこれを達成する効率的な方法が提供されます。 string_to_table() 関数。この関数は、対象の列をトークンの配列に分割します。

SELECT token, flag
FROM tbl, string_to_table(subject, ' ') AS token
WHERE flag = 2;
ログイン後にコピー

string_to_array() による解決策 (Postgres 13-)

Postgres 13 以前の場合は、次を使用します。代わりに string_to_array() 関数string_to_table():

SELECT unnest(string_to_array(subject, ' ')) AS token, flag
FROM tbl
WHERE flag = 2;
ログイン後にコピー

正規表現を使用した代替解決策

もう 1 つのオプションは、string_to_table() よりも効率が劣りますが、regexp_split_to_table() 関数を使用することです。アプローチ:

SELECT s.token, t.flag
FROM tbl t
CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token)
WHERE t.flag = 2;
ログイン後にコピー

追加メモ

  • WHERE 句は、フラグ値に基づいて結果をフィルタリングするために使用されます。
  • FROM リスト内のカンマは、FROM 内のセットを返す関数に対して自動的に想定される CROSS JOIN を表します。 list.
  • 件名の列が空または null の場合は、ON TRUE を指定した LEFT JOIN を使用して、元のテーブルから修飾された行を保持します。

以上がPostgreSQLで列を複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート