我有下表
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
组合所需(因此对于大型数据集 - 它会变慢......)
我想知道,这是否是实现这一目标的正确方法,是否有更好,更有效的方法来获得理想的结果。
感谢。