В Postgres 9.3+ използвайте LATERAL присъединете се:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Това е имплицитно LATERAL присъединяване. Ако unnest() не връща никакви редове (празен или NULL subject). ), резултатът изобщо няма да бъде ред. Използвайте LEFT JOIN unnest(...) i ON true за да връща винаги редове от tbl . Вижте:
- Каква е разликата между LATERAL JOIN и подзаявка в PostgreSQL?
Можете също да използвате regexp_split_to_table() , но това обикновено е по-бавно, защото съвпадението на регулярните изрази струва малко повече. Свързано:
- SQL избира редове, съдържащи подниз в текстово поле
- PostgreSQL unnest() с номер на елемент