私はテーブルを持っています: 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;
このクエリは、カンマ区切りの値の数が少ない限り正常に機能します。しかし、それが大きくなると、処理にますます時間がかかります。
私が思いついた解決策の 1 つは、別のテーブルを作成し、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を使用しています。
前もって感謝します。