Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Baris Pendua Apabila Memisahkan Nilai Dipisahkan Koma dalam Oracle?

Bagaimana untuk Mengelakkan Baris Pendua Apabila Memisahkan Nilai Dipisahkan Koma dalam Oracle?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-01 05:30:09544semak imbas

How to Avoid Duplicate Rows When Splitting Comma-Separated Values in Oracle?

Memisahkan Berbilang Nilai Dipisahkan Koma menjadi Berbilang Baris Jadual Oracle tanpa Pendua

Apabila memisahkan data yang dipisahkan koma kepada berbilang baris menggunakan Oracle's CONNECT BY dan ungkapan biasa, adalah mungkin untuk menemui baris pendua. Di bawah ialah pertanyaan asal yang menjana hasil pendua:

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

SELECT TRIM(REGEXP_SUBSTR(TEMP, '[^,]+', 1, LEVEL)), SLNO
FROM CTE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp, '[^,]+')) + 1

Untuk menyelesaikan isu baris pendua, pengubahsuaian berikut telah dibuat pada pertanyaan:

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

Penjelasan :

  • Fungsi REGEXP_COUNT digunakan untuk menentukan bilangan nilai dipisahkan koma dalam setiap rentetan.
  • Operator PRIOR memastikan baris semasa disambungkan ke baris sebelumnya berdasarkan lajur slno.
  • Fungsi DBMS_RANDOM.VALUE menjana nilai rawak dan digunakan untuk memperkenalkan rawak dalam proses pembahagian, yang membantu menghalang baris pendua daripada dijana.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Baris Pendua Apabila Memisahkan Nilai Dipisahkan Koma dalam Oracle?. 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