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