Oracle: カンマ区切りの値を複数の行に効率的に分割する
Oracle クエリで、CONNECT を使用してカンマ区切りのデータを複数の行に分割する場合BY と正規表現を使用すると、重複行が発生する可能性があります。この問題を解決するには、次の戦略を検討してください。
正確な分割に REGEXP_COUNT() を使用する
変更されたクエリでは、カンマ区切りの数を決定するために REGEXP_COUNT() が導入されています。それぞれの値行:
WITH CTE AS ( SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL UNION SELECT 'f,g' temp, 2 slno FROM DUAL UNION SELECT 'h' temp, 3 slno FROM DUAL ) SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno FROM CTE CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+') AND PRIOR slno = slno AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
レベルおよび以前の DBMS_RANDOM.VALUE による接続の利用
この拡張クエリでは、CONNECT BY LEVEL と PRIOR DBMS_RANDOM.VALUE を利用して重複を排除します。
WITH CTE AS ( SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL UNION SELECT 'f,g' temp, 2 slno FROM DUAL UNION SELECT 'h' temp, 3 slno FROM DUAL ) SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno FROM CTE CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+') AND PRIOR slno = slno
この変更されたクエリを利用すると、重複行を確実に削除しながら、カンマ区切りの値を複数の行に効果的に分割できます。
以上がOracle でコンマ区切り値を重複せずに複数の行に効率的に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。