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
Libérer: 2025-01-06 21:54:44
original
770 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal