Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Lajur menjadi Berbilang Baris dalam PostgreSQL?

Bagaimana untuk Memisahkan Lajur menjadi Berbilang Baris dalam PostgreSQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-06 21:54:44771semak imbas

How to Split a Column into Multiple Rows in PostgreSQL?

Memisahkan Lajur kepada Berbilang Baris dalam Postgres

Andaikan anda mempunyai jadual dengan lajur yang mengandungi berbilang nilai, seperti:

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

Anda mungkin perlu menukar jadual ini kepada struktur baharu di mana setiap nilai daripada lajur asal menjadi baris yang berasingan, seperti ini:

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

Penyelesaian dengan Sertaan LATERAL (Postgres 14 )

Postgres 14 dan kemudiannya menyediakan cara yang cekap untuk mencapai ini menggunakan gabungan LATERAL dengan string_to_table( ) fungsi. Fungsi ini membahagikan lajur subjek kepada tatasusunan token:

SELECT token, flag
FROM tbl, string_to_table(subject, ' ') AS token
WHERE flag = 2;

Penyelesaian dengan string_to_array() (Postgres 13-)

Untuk Postgres 13 atau lebih awal, gunakan fungsi string_to_array() bukannya string_to_table():

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

Penyelesaian Alternatif dengan Regexp

Pilihan lain ialah menggunakan fungsi regexp_split_to_table(), walaupun ia kurang cekap berbanding string_to_table() pendekatan:

SELECT s.token, t.flag
FROM tbl t
CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token)
WHERE t.flag = 2;

Tambahan Nota

  • Klausa WHERE digunakan untuk menapis keputusan berdasarkan nilai bendera.
  • Koma dalam senarai FROM mewakili CROSS JOIN, yang diandaikan secara automatik untuk fungsi set-returning dalam senarai FROM.
  • Jika lajur subjek boleh kosong atau batal, gunakan LEFT JOIN dengan ON TRUE untuk mengekalkan baris yang layak daripada jadual asal.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Lajur menjadi Berbilang Baris dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn