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