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