I Postgres 9.3+ använd en LATERAL
gå med:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Det är en implicit LATERAL
Ansluta sig. Om unnest()
returnerar inga rader (tom eller NULL subject
), blir resultatet ingen rad alls. Använd LEFT JOIN unnest(...) i ON true
att alltid returnera rader från tbl
. Se:
- Vad är skillnaden mellan LATERAL JOIN och en underfråga i PostgreSQL?
Du kan också använda regexp_split_to_table()
, men det är vanligtvis långsammare eftersom matchning av reguljära uttryck kostar lite mer. Relaterat:
- SQL-valrader som innehåller delsträng i textfältet
- PostgreSQL unnest() med elementnummer