Maison >base de données >tutoriel mysql >Comment diviser une colonne Postgres en plusieurs lignes ?

Comment diviser une colonne Postgres en plusieurs lignes ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-06 21:43:48733parcourir

How to Split a Postgres Column into Multiple Rows?

Diviser la colonne en plusieurs lignes dans Postgres

Énoncé du problème

Considérez le tableau Postgres suivant :

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

L'objectif est de transformer ce tableau en un nouveau tableau avec chaque mot de la colonne "sujet" étant une nouvelle ligne, tout en préservant le correspondant Valeur "flag".

Solution

Un moyen efficace d'y parvenir dans Postgres consiste à utiliser une jointure LATERAL en conjonction avec string_to_table() (disponible dans Postgres 14). Cela nous permet de diviser la colonne « sujet » en jetons individuels et de les joindre à la table d'origine.

La requête suivante accomplit cette transformation :

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

Dans cette requête, nous utilisons le Jointure LATÉRALE pour générer un ensemble de lignes pour chaque jeton dans la colonne "sujet", et nous filtrons les résultats en fonction du "drapeau" spécifié value.

Approches alternatives

Pour Postgres 13 et versions antérieures, unnest(string_to_array(subject, ' ')) peut être utilisé à la place de string_to_table(subject, ' ') .

Une autre approche consiste à utiliser regexp_split_to_table() fonction, qui permet une tokenisation plus flexible basée sur des expressions régulières. Cependant, cette approche est généralement plus lente que l'utilisation de string_to_table().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn