복붙노트

[SQL] 포스트 그레스에서 여러 행으로 분할 열

SQL

포스트 그레스에서 여러 행으로 분할 열

나는이 같은 테이블이 있다고 가정하자 :

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

주제는 text 형식이며, 플래그는 int 타입이다. 나는 포스트 그레스에서이 같은이 테이블을 변환하고 싶습니다 :

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

이 작업을 수행하는 쉬운 방법이 있습니까?

해결법

  1. ==============================

    1.포스트 그레스에서 조인 측면 사용 9.3+ :

    포스트 그레스에서 조인 측면 사용 9.3+ :

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

    측면의 속기 양식이 조인 주에만 unnest 경우 () 실제로 행을 반환 행을 반환합니다.

    당신은 또한) (regexp_split_to_table 사용할 수 있지만 정규 표현식 매칭이 좀 더 비용 때문는 일반적으로 느리다. 관련 :

  2. ==============================

    2.나는 그것이 그것을해야한다) string_to_array (과 함께, 단지 unnest () 함수를 조인을 사용하지 않아도 생각 :

    나는 그것이 그것을해야한다) string_to_array (과 함께, 단지 unnest () 함수를 조인을 사용하지 않아도 생각 :

    SELECT unnest(string_to_array(subject, ' ')) as "token", flag FROM test;
    
    unnest | token                                                                                                   
    -------+-------                                                                                                  
    this   |     2                                                                                                   
    is     |     2                                                                                                   
    a      |     2                                                                                                   
    test   |     2                                                                                                   
    
  3. from https://stackoverflow.com/questions/29419993/split-column-into-multiple-rows-in-postgres by cc-by-sa and MIT license