Setara Oracle dengan GROUP_CONCAT MySQL
FungsiMySQL GROUP_CONCAT
menggabungkan berbilang baris dengan cekap menjadi satu rentetan. Oracle menawarkan beberapa cara untuk mencapai hasil yang sama, bergantung pada versi pangkalan data anda.
LISTAGG: Kaedah Pilihan (Oracle 11g dan lebih baru)
Fungsi LISTAGG
ialah pendekatan yang disyorkan untuk versi Oracle moden (11g dan ke atas). Ia menyediakan penyelesaian yang bersih dan cekap untuk menggabungkan nilai dalam kumpulan:
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names FROM table_x GROUP BY col1</code>
Pertanyaan ini mengumpulkan baris mengikut col1
dan menggabungkan nilai col2
yang sepadan, dipisahkan dengan koma dan ruang, disusun dengan col2
.
Fungsi Tersuai: Untuk Versi Oracle Lama (10g dan lebih awal)
Untuk Oracle 10g dan versi terdahulu yang tidak mempunyai LISTAGG
, fungsi tersuai diperlukan:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_concatenated_values (input_val IN NUMBER) RETURN VARCHAR2 IS concatenated_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP concatenated_text := concatenated_text || ',' || x.col2; END LOOP; RETURN LTRIM(concatenated_text, ','); END; /</code>
Penggunaan:
<code class="language-sql">SELECT col1, get_concatenated_values(col1) FROM table_name;</code>
Fungsi ini berulang melalui baris yang sepadan dengan nilai input dan menambahkan nilai col2
pada rentetan. Fungsi LTRIM
mengalih keluar koma di hadapan.
WM_CONCAT: Gunakan dengan Berhati-hati
Sesetengah versi Oracle lama mungkin termasuk WM_CONCAT
. Walau bagaimanapun, ia adalah fungsi yang tidak disokong dan tingkah lakunya mungkin tidak konsisten merentas versi. Oleh itu, adalah dinasihatkan untuk mengelak WM_CONCAT
dan menggunakan LISTAGG
atau fungsi tersuai sebagai ganti:
<code class="language-sql">SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;</code>
Pilih kaedah yang sesuai untuk versi Oracle anda. LISTAGG
ialah penyelesaian pilihan dan paling boleh dipercayai untuk versi yang lebih baharu. Untuk versi lama, fungsi tersuai menyediakan alternatif yang mantap. Elakkan WM_CONCAT
melainkan benar-benar perlu dan fahami batasannya.
Atas ialah kandungan terperinci Bagaimana untuk Menggantikan GROUP_CONCAT MySQL dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!