In Postgres 9.3+ usa un LATERAL unisciti:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
È un implicito LATERAL giuntura. Se unnest() non restituisce alcuna riga (vuota o NULL subject ), il risultato non sarà affatto una riga. Usa LEFT JOIN unnest(...) i ON true per restituire sempre le righe da tbl . Vedi:
- Qual è la differenza tra LATERAL JOIN e una sottoquery in PostgreSQL?
Puoi anche usare regexp_split_to_table() , ma in genere è più lento perché la corrispondenza delle espressioni regolari costa un po' di più. Correlati:
- SQL seleziona righe contenenti sottostringa nel campo di testo
- PostgreSQL unnest() con numero elemento