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 ?
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!