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

Comment diviser une colonne en plusieurs lignes dans PostgreSQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-06 21:54:44794parcourir

How to Split a Column into Multiple Rows in PostgreSQL?

Diviser une colonne en plusieurs lignes dans Postgres

Supposons que vous ayez une table avec une colonne contenant plusieurs valeurs, telles que :

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

Vous devrez peut-être transformer ce tableau en une nouvelle structure où chaque valeur de la colonne d'origine devient une ligne distincte, comme ceci :

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

Solution avec jointure LATERAL (Postgres 14)

Postgres 14 et versions ultérieures fournissent un moyen efficace d'y parvenir en utilisant une jointure LATERAL avec string_to_table( ) fonction. Cette fonction divise la colonne d'objet en un tableau de jetons :

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

Solution avec string_to_array() (Postgres 13-)

Pour Postgres 13 ou version antérieure, utilisez la fonction string_to_array() au lieu de string_to_table() :

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

Solution alternative avec Regexp

Une autre option consiste à utiliser la fonction regexp_split_to_table(), bien qu'elle soit moins efficace que string_to_table() approche :

SELECT s.token, t.flag
FROM tbl t
CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token)
WHERE t.flag = 2;

Supplémentaire Notes

  • La clause WHERE est utilisée pour filtrer les résultats en fonction de la valeur de l'indicateur.
  • La virgule dans la liste FROM représente un CROSS JOIN, qui est automatiquement supposé pour fonctions renvoyant un ensemble dans la liste FROM.
  • Si la colonne sujet peut être vide ou nulle, utilisez un LEFT JOIN avec ON TRUE pour conserver les lignes qualificatives du tableau original.

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