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
Libérer: 2025-01-01 05:30:09
original
542 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal