Maison >base de données >tutoriel mysql >Comment éviter les lignes en double lors du fractionnement de valeurs séparées par des virgules dans Oracle ?

Comment éviter les lignes en double lors du fractionnement de valeurs séparées par des virgules dans Oracle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-01 05:30:09537parcourir

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

Diviser plusieurs valeurs séparées par des virgules en plusieurs lignes de table Oracle sans doublons

Lors de la division de données séparées par des virgules en plusieurs lignes à l'aide de CONNECT BY d'Oracle et les expressions régulières, il est possible de rencontrer des lignes en double. Vous trouverez ci-dessous la requête d'origine qui générait des résultats en double :

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

Pour résoudre le problème des lignes en double, les modifications suivantes ont été apportées à la requête :

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

Explication :

  • La fonction REGEXP_COUNT est utilisée pour déterminer le nombre de valeurs séparées par des virgules dans chaque string.
  • L'opérateur PRIOR garantit que la ligne actuelle est connectée à la ligne précédente en fonction de la colonne slno.
  • La fonction DBMS_RANDOM.VALUE génère une valeur aléatoire et est utilisée pour introduire du caractère aléatoire dans le processus de partitionnement, qui permet d'éviter la génération de lignes en double.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn