Verwenden Sie in Postgres 9.3+ einen LATERAL beitreten:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Es ist ein implizites LATERAL beitreten. Wenn unnest() gibt keine Zeilen zurück (leer oder NULL subject ), ist das Ergebnis überhaupt keine Zeile. Verwenden Sie LEFT JOIN unnest(...) i ON true um immer Zeilen aus tbl zurückzugeben . Siehe:
- Was ist der Unterschied zwischen LATERAL JOIN und einer Unterabfrage in PostgreSQL?
Sie könnten auch regexp_split_to_table() verwenden , aber das ist normalerweise langsamer, weil der Abgleich mit regulären Ausdrücken etwas mehr kostet. Verwandte:
- SQL-Auswahlzeilen mit Teilstring im Textfeld
- PostgreSQL unnest() mit Elementnummer