2015-04-02 9 views
15

Załóżmy, że mam tabeli jak poniżej:Podział kolumny do wielu wierszy w PostgreSQL

subject  | flag 
----------------+------ 
this is a test | 2 

subject jest typu text i flag jest typu int. Chciałbym przekształcić ten stół w coś podobnego w Postgres:

token  | flag 
----------------+------ 
this   | 2 
is    | 2 
a    | 2 
test   | 2 

Czy istnieje prosty sposób na zrobienie tego?

Odpowiedz

26

W Postgres'a 9.3+ użyć LATERAL przyłączenia:

SELECT s.token, flag 
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token) 
WHERE flag = 2; 

Należy zauważyć, że skróconą formą LATERAL dołączyć tylko zwraca wierszy, jeśli unnest() rzeczywiście powraca rzędu (i).

Można również użyć regexp_split_to_table(), ale zwykle jest to wolniejsze, ponieważ dopasowanie wyrażenia regularnego kosztuje nieco więcej.
pokrewne: