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