PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Divida a coluna em várias linhas no Postgres


No Postgres 9.3+ use um LATERAL Junte-se:
SELECT s.token, flag
FROM   tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE  flag = 2;

É um LATERAL implícito Junte-se. Se unnest() não devolve nenhuma linha (vazio ou NULL subject ), o resultado será nenhuma linha. Use LEFT JOIN unnest(...) i ON true para sempre retornar linhas de tbl . Ver:
  • Qual ​​é a diferença entre LATERAL JOIN e uma subconsulta no PostgreSQL?

Você também pode usar regexp_split_to_table() , mas isso geralmente é mais lento porque a correspondência de expressão regular custa um pouco mais. Relacionado:
  • SQL seleciona linhas contendo substring no campo de texto
  • PostgreSQL unnest() com número do elemento