Heim >Datenbank >MySQL-Tutorial >Wie kann ich durch Kommas getrennte Werte in Oracle effizient aufteilen, ohne doppelte Zeilen zu generieren?

Wie kann ich durch Kommas getrennte Werte in Oracle effizient aufteilen, ohne doppelte Zeilen zu generieren?

Linda Hamilton
Linda HamiltonOriginal
2025-01-01 06:29:10552Durchsuche

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

Aufteilen mehrerer durch Kommas getrennter Werte in einer Oracle-Tabelle in eindeutige Zeilen

In Oracle wird häufig durch Kommas getrennte Werte in mehrere Zeilen aufgeteilt unter Verwendung regulärer Ausdrücke und der CONNECT BY-Klausel. Eine häufig auftretende Herausforderung ist jedoch die Generierung doppelter Zeilen. Dies kann besonders problematisch in Tabellen mit mehreren Zeilen sein, in denen jede Zeile durch Kommas getrennte Zeichenfolgen enthält.

Um dieses Problem zu beheben, kann eine modifizierte Abfrage verwendet werden, um die Werte aufzuteilen und gleichzeitig doppelte Zeilen effektiv zu entfernen:

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

Diese Abfrage führt zwei wichtige Änderungen ein:

  1. Prüfung der vorherigen Zeile: Die Die Bedingung PRIOR slno = slno stellt sicher, dass nur Zeilen aus derselben Quellzeile verarbeitet werden, wodurch doppelte Zeilen aus verschiedenen Zeilen wirksam verhindert werden.
  2. Zufallswertprüfung: Die Bedingung PRIOR DBMS_RANDOM.VALUE IS NOT NULL wählt für jede Zeile einen Zufallswert aus und stellt so sicher, dass jeder geteilte Wert eine eindeutige Kombination aus Zeile und Zufall aufweist Wert.

Dadurch teilt diese Abfrage durch Kommas getrennte Werte effektiv in mehrere Zeilen auf, behält dabei die eindeutige Zeilenidentifikation bei und verhindert die Generierung doppelter Zeilen.

Das obige ist der detaillierte Inhalt vonWie kann ich durch Kommas getrennte Werte in Oracle effizient aufteilen, ohne doppelte Zeilen zu generieren?. 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