考慮以下 Postgres表:
subject | flag ---------+------ this is a test | 2
目標就是將此表轉換為一個新表,其中「主題」列中的每個單字都是新的行,同時保留對應的「標誌」值。
在 Postgres 中實現此目的的一種有效方法是使用 LATERAL join 與 string_to_table() 結合使用(在 Postgres 14 中可用) 。這允許我們將“主題”列拆分為單獨的標記,並將它們與原始表連接起來。
以下查詢完成此轉換:
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
在此查詢中,我們使用LATERAL join 為「主題」列中的每個標記產生一組行,並且我們根據指定的「標誌」過濾結果
替代方法
對於Postgres 13 及更早版本,可以使用unnest(string_to_array(subject, ' ')) 來取代string_to_table(subject, ' ') .
另一種方法是使用regexp_split_to_table() 函數,它允許基於正規表示式進行更靈活的標記化。然而,這種方法通常比使用 string_to_table() 慢。
以上是如何將 Postgres 欄位拆分為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!