V Postgresu 9.3+ použijte LATERAL připojit se:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Je to implicitní LATERAL připojit. Pokud unnest() nevrací žádné řádky (prázdné nebo NULL subject ), výsledkem nebude vůbec žádný řádek. Použijte LEFT JOIN unnest(...) i ON true vždy vrátit řádky z tbl . Viz:
- Jaký je rozdíl mezi LATERAL JOIN a dílčím dotazem v PostgreSQL?
Můžete také použít regexp_split_to_table() , ale to je obvykle pomalejší, protože párování regulárních výrazů stojí o něco více. Související:
- SQL vybere řádky obsahující podřetězec v textovém poli
- PostgreSQL unnest() s číslem prvku