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 ?
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
Cette requête introduit deux modifications clés :
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!