Maison > base de données > tutoriel mysql > Comment puis-je diviser efficacement les valeurs séparées par des virgules dans Oracle sans générer de lignes en double ?

Comment puis-je diviser efficacement les valeurs séparées par des virgules dans Oracle sans générer de lignes en double ?

Linda Hamilton
Libérer: 2025-01-01 06:29:10
original
524 Les gens l'ont consulté

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

Diviser plusieurs valeurs séparées par des virgules dans une table Oracle en lignes uniques

Dans Oracle, diviser des valeurs séparées par des virgules en plusieurs lignes est généralement effectué en utilisant des expressions régulières et la clause CONNECT BY. Cependant, un défi souvent rencontré est la génération de lignes en double. Cela peut être particulièrement problématique dans les tableaux comportant plusieurs lignes où chaque ligne contient des chaînes séparées par des virgules.

Pour résoudre ce problème, une requête modifiée peut être utilisée pour diviser les valeurs tout en éliminant efficacement les lignes en double :

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

Cette requête introduit deux modifications clés :

  1. Vérification de la ligne précédente : Le PRIOR La condition slno = slno garantit que seules les lignes de la même ligne source sont traitées, empêchant ainsi les lignes en double de différentes lignes.
  2. Vérification de la valeur aléatoire : La condition PRIOR DBMS_RANDOM.VALUE IS NOT NULL sélectionne une valeur aléatoire pour chaque ligne, garantissant que chaque valeur divisée a une combinaison unique de ligne et d'aléatoire valeur.

En conséquence, cette requête divise efficacement les valeurs séparées par des virgules en plusieurs lignes tout en conservant l'identification unique de la ligne et en empêchant 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