【发布时间】:2013-09-17 05:06:11
【问题描述】:
我在使用 oracle 拆分查询时遇到问题。
在 oracle 查询中使用 connect by 和正则表达式将逗号分隔的数据拆分为多行时,我得到了更多的重复行。例如,实际上我的表有 150 行,其中两行有逗号分隔的字符串,所以总的来说我只需要 155 行,但我得到 2000 行。如果我使用 distinct 它工作正常,但我不希望查询结果中有重复的行。
我尝试了以下查询,但是它在查询结果中生成了重复的行:
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
编辑
上述选择查询只能拆分单个逗号分隔的字符串,但是,在具有多行的表上执行时会产生重复行。如何限制重复行?
【问题讨论】:
-
此问题与另一个标记为重复的问题不重复。另一个问题是拆分单行,这个问题是关于多行的。
-
接受的答案使用了不合适的条件
DBMS_RANDOM.VALUE IS NOT NULL。它只是防止循环循环,但是会出现一个直截了当的问题:dbms_random.VALUE 如何以及何时可以为空? 从逻辑上讲,它永远不会为空。更合适的解决方案是使用sys.odciNumberList并防止循环循环。请在下面查看我的答案。