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