sql >> Base de Datos >  >> RDS >> PostgreSQL

Dividir columna en varias filas en Postgres

En Postgres 9.3+ use un LATERAL unirse:

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

Es un LATERAL implícito entrar. Si unnest() no devuelve filas (vacías o NULL subject ), el resultado no será ninguna fila. Use LEFT JOIN unnest(...) i ON true para devolver siempre las filas de tbl . Ver:

  • ¿Cuál es la diferencia entre LATERAL JOIN y una subconsulta en PostgreSQL?

También podría usar regexp_split_to_table() , pero suele ser más lento porque la coincidencia de expresiones regulares cuesta un poco más. Relacionado:

  • SQL seleccionar filas que contienen subcadenas en el campo de texto
  • PostgreSQL unnest() con número de elemento