2015-04-02 13 views
15

Supponiamo di avere una tabella come questa:colonna Split in più righe in Postgres

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

subject è di tipo text, e flag è di tipo int. Vorrei trasformare questa tabella per qualcosa di simile in Postgres:

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

C'è un modo semplice per fare questo?

risposta

26

In Postgres 9.3+ utilizzare un LATERAL join:

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

nota che la forma abbreviata di un LATERAL join restituisce solo le righe, se unnest() restituisce effettivamente fila (s).

È anche possibile utilizzare regexp_split_to_table(), ma in genere è più lento perché la corrispondenza delle espressioni regolari costa un po 'di più.
correlati: