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