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