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