ホームページ > データベース > mysql チュートリアル > Oracle でコンマ区切り値を重複せずに複数の行に効率的に分割する方法

Oracle でコンマ区切り値を重複せずに複数の行に効率的に分割する方法

Barbara Streisand
リリース: 2024-12-31 05:48:13
オリジナル
385 人が閲覧しました

How to Efficiently Split Comma-Separated Values into Multiple Rows in Oracle Without Duplicates?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート