Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Oracle Tanpa Menjana Baris Pendua?

Bagaimanakah Saya Boleh Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Oracle Tanpa Menjana Baris Pendua?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 06:29:10535semak imbas

How Can I Efficiently Split Comma-Separated Values in Oracle Without Generating Duplicate Rows?

Memisahkan Berbilang Nilai Dipisahkan Koma dalam Jadual Oracle kepada Baris Unik

Dalam oracle, pemisahan nilai yang dipisahkan koma kepada berbilang baris biasanya dilakukan menggunakan ungkapan biasa dan klausa CONNECT BY. Walau bagaimanapun, satu cabaran yang sering dihadapi ialah penjanaan baris pendua. Ini boleh menjadi masalah terutamanya dalam jadual dengan berbilang baris di mana setiap baris mengandungi rentetan dipisahkan koma.

Untuk menangani isu ini, pertanyaan yang diubah suai boleh digunakan untuk memisahkan nilai sambil menghapuskan baris pendua dengan berkesan:

WITH CTE AS (SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL
              UNION
              SELECT 'f,g' temp, 2 slno FROM DUAL
              UNION
              SELECT 'h' temp, 3 slno FROM DUAL)

SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno
FROM CTE
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
    AND PRIOR slno = slno
    AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

Pertanyaan ini memperkenalkan dua kunci pengubahsuaian:

  1. Semakan Baris Sebelum: Keadaan slno = slno SEBELUM memastikan bahawa hanya baris dari baris sumber yang sama diproses, dengan berkesan menghalang baris pendua daripada baris yang berbeza.
  2. Semakan Nilai Rawak: SEBELUMNYA DBMS_RANDOM.VALUE IS NOT NULL syarat memilih nilai rawak untuk setiap baris, memastikan setiap nilai pecahan mempunyai gabungan unik baris dan nilai rawak.

Akibatnya, pertanyaan ini memisahkan dipisahkan koma dengan berkesan nilai ke dalam berbilang baris sambil mengekalkan pengenalan baris yang unik dan menghalang baris pendua daripada dijana.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Oracle Tanpa Menjana Baris Pendua?. 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