Heim >Datenbank >MySQL-Tutorial >Wie kann man in Oracle durch Kommas getrennte Werte effizient und ohne Duplikate in mehrere Zeilen aufteilen?

Wie kann man in Oracle durch Kommas getrennte Werte effizient und ohne Duplikate in mehrere Zeilen aufteilen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 05:48:13385Durchsuche

How to Efficiently Split Comma-Separated Values into Multiple Rows in Oracle Without Duplicates?

Oracle: Durch Kommas getrennte Werte effizient in mehrere Zeilen aufteilen

In Oracle-Abfragen, wenn durch Kommas getrennte Daten mithilfe von CONNECT in mehrere Zeilen aufgeteilt werden BY und reguläre Ausdrücke können doppelte Zeilen entstehen. Um dieses Problem zu lösen, sollten Sie die folgenden Strategien in Betracht ziehen:

Verwendung von REGEXP_COUNT() für eine genaue Aufteilung

Die geänderte Abfrage führt REGEXP_COUNT() ein, um die Anzahl der durch Kommas getrennten Werte zu ermitteln Werte in jeder Zeile:

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

Nutzung der Verbindung nach Ebene und Priorität DBMS_RANDOM.VALUE

Diese erweiterte Abfrage nutzt CONNECT BY LEVEL zusammen mit PRIOR DBMS_RANDOM.VALUE, um Duplikate zu eliminieren:

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

Durch die Verwendung dieser modifizierten Abfrage können Sie Komma- Trennen Sie Werte in mehrere Zeilen und stellen Sie gleichzeitig sicher, dass doppelte Zeilen entfernt werden.

Das obige ist der detaillierte Inhalt vonWie kann man in Oracle durch Kommas getrennte Werte effizient und ohne Duplikate in mehrere Zeilen aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn