W Postgresie 9.3+ użyj LATERAL
dołącz:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Jest to niejawny LATERAL
Przystąp. Jeśli unnest()
nie zwraca żadnych wierszy (puste lub NULL subject
), wynikiem będzie w ogóle brak wiersza. Użyj LEFT JOIN unnest(...) i ON true
aby zawsze zwracać wiersze z tbl
. Zobacz:
- Jaka jest różnica między ŁĄCZENIEM BOCZNYM a podzapytanie w PostgreSQL?
Możesz także użyć regexp_split_to_table()
, ale zwykle jest to wolniejsze, ponieważ dopasowanie wyrażeń regularnych kosztuje nieco więcej. Powiązane:
- Wybierz wiersze SQL zawierające podciąg w polu tekstowym
- PostgreSQL unnest() z numerem elementu