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