Diviser les colonnes en plusieurs lignes dans Postgres
Étant donné un tableau avec une colonne contenant du texte et une autre colonne contenant des indicateurs d'entiers, il peut y avoir un Il est nécessaire de transformer le tableau dans un nouveau format dans lequel chaque mot de la colonne de texte devient une ligne distincte dans le nouveau tableau, tout en conservant les valeurs d'indicateur correspondantes. Cet article explique comment y parvenir en utilisant Postgres.
Une méthode efficace consiste à utiliser une jointure LATERAL en combinaison avec la fonction string_to_table() dans Postgres 14 ou version ultérieure. Le mot clé LATERAL est appliqué à la jointure pour créer une fonction de retour d'ensemble (SRF) qui renvoie plusieurs lignes pour chaque ligne de la table parent. La fonction string_to_table() divise la colonne de texte en mots individuels, créant une nouvelle ligne pour chaque mot.
Par exemple, considérons la requête suivante :
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
Cette requête effectue une jointure LATÉRALE entre la table tbl et le SRF string_to_table(subject, ' '), qui tokenise la colonne sujet en la divisant sur un espace blanc. La clause WHERE filtre les résultats pour inclure les lignes où la colonne d'indicateur est égale à 2. Par conséquent, la table de sortie aura une ligne pour chaque mot de la colonne sujet, avec les valeurs d'indicateur correspondantes.
Dans Postgres 13 ou version antérieure, unnest(string_to_array(subject, ' ')) peut être utilisé à la place de string_to_table(subject, ' ').
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!