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