我有一张桌子: Table_1 如下所示:
id | column1
-----------------
10 | abc, kdm
20 | xyz, lop, nkk
我想要的是转换表如下所示:
id | column1
-----------------
10 | abc
10 | kdm
20 | xyz
20 | lop
20 | nkk
为此,我使用了这样的查询:
select id, regexp_substr(column1,'[^,]+', 1, level) from Table_1
connect by regexp_substr(column1, '[^,]+', 1, level) is not null;
只要逗号分隔值的数量较少,此查询就可以正常工作。但是当它长大时,它会消耗越来越多的时间来处理。
我想到的一种解决方案是创建一个单独的表,然后通过迭代 Table_1 的值来插入值。
伪代码如下:
FOR r in each row
FOR i in 1..length(comma_separated_values)
insert into new_table values(id, select regexp_substr(column1,'[^,]+', 1, i) from Table_1
End LOOP;
End LOOP;
但是由于随着逗号分隔值的增长,这也会消耗很多时间,是否有任何其他最佳方法可以做到这一点(最好不要使用另一个表,但临时/虚拟表可以)?
我正在使用 Oracle SQL。
提前致谢。