Maison >base de données >tutoriel mysql >Comment diviser efficacement les valeurs séparées par des virgules en plusieurs lignes dans Oracle sans doublons ?

Comment diviser efficacement les valeurs séparées par des virgules en plusieurs lignes dans Oracle sans doublons ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-31 05:48:13382parcourir

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

Oracle : diviser efficacement les valeurs séparées par des virgules en plusieurs lignes

Dans les requêtes Oracle, lors de la division de données séparées par des virgules en plusieurs lignes à l'aide de CONNECT BY et expressions régulières, des lignes en double peuvent apparaître. Pour surmonter ce problème, envisagez les stratégies suivantes :

Utilisation de REGEXP_COUNT() pour un fractionnement précis

La requête modifiée introduit REGEXP_COUNT() pour déterminer le nombre de mots séparés par des virgules. valeurs dans chaque ligne :

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

Exploiter la connexion par niveau et avant DBMS_RANDOM.VALUE

Cette requête améliorée utilise CONNECT BY LEVEL avec PRIOR DBMS_RANDOM.VALUE pour éliminer les doublons :

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

En utilisant cette requête modifiée, vous pouvez diviser efficacement les virgules- séparer les valeurs en plusieurs lignes tout en garantissant que les lignes en double sont éliminées.

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