Brug en LATERAL i Postgres 9.3+ deltage:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Det er en implicit LATERAL tilslutte. Hvis unnest() returnerer ingen rækker (tom eller NULL subject ), vil resultatet ikke være nogen række overhovedet. Brug LEFT JOIN unnest(...) i ON true for altid at returnere rækker fra tbl . Se:
- Hvad er forskellen mellem LATERAL JOIN og en underforespørgsel i PostgreSQL?
Du kan også bruge regexp_split_to_table() , men det er typisk langsommere, fordi matchning af regulære udtryk koster lidt mere. Relateret:
- SQL-vælg rækker, der indeholder understreng i tekstfeltet
- PostgreSQL unnest() med elementnummer