Oracle sql为每行标识

时间:2017-07-13 06:07:41

标签: sql oracle

我有下表

MYDATA:

ID  NUMBERS
1   1,2
2   1,2,3,4,5
3   1,2,3

我的最终目标是生成以下结果

ID  Num
1   1
1   2
2   1
2   2
2   3
2   4
2   5
3   1
3   2
3   3

e.g。每个id的所有组合以及相应的数字

现在......我想出了以下查询

with mydata as (
select 1 as id, '1,2' as numbers from dual
union
select 2 as id, '1,2,3,4,5' as numbers from dual
union 
select 3 as id, '1,2,3' as numbers from dual
)
SELECT distinct  id,TRIM(REGEXP_SUBSTR(numbers, '[^,]+', 1, level)) lv
   FROM (
    select id, numbers
    from mydata 
  )
    CONNECT BY  level <= REGEXP_COUNT(numbers, '[^,]+')
  order by id

如果没有distinct,则上述查询会提供66个重复组合,而不是10组合所需(因此对于大型数据集 - 它会变慢......)

我想知道,这是否是实现这一目标的正确方法,是否有更好,更有效的方法来获得理想的结果。

感谢。

0 个答案:

没有答案