PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Diviser la colonne en plusieurs lignes dans Postgres

Dans Postgres 9.3+, utilisez un LATERAL rejoindre :

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

C'est un LATERAL implicite rejoindre. Si unnest() ne renvoie aucune ligne (vide ou NULL subject ), le résultat sera aucune ligne du tout. Utilisez LEFT JOIN unnest(...) i ON true pour toujours renvoyer les lignes de tbl . Voir :

  • Quelle est la différence entre LATERAL JOIN et une sous-requête dans PostgreSQL ?

Vous pouvez également utiliser regexp_split_to_table() , mais cela est généralement plus lent car la correspondance des expressions régulières coûte un peu plus cher. Connexe :

  • SQL sélectionne les lignes contenant une sous-chaîne dans le champ de texte
  • PostgreSQL unnest() avec le numéro d'élément