В 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() с номер на елемент