ホームページ > データベース > mysql チュートリアル > Oracle で重複行を生成せずにカンマ区切り値を効率的に分割するにはどうすればよいですか?

Oracle で重複行を生成せずにカンマ区切り値を効率的に分割するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-01 06:29:10
オリジナル
523 人が閲覧しました

How Can I Efficiently Split Comma-Separated Values in Oracle Without Generating Duplicate Rows?

Oracle テーブル内の複数のカンマ区切り値を一意の行に分割する

Oracle では、カンマ区切り値を複数の行に分割するのが一般的です。正規表現と CONNECT BY 句を使用します。ただし、よく遭遇する課題の 1 つは重複行の生成です。これは、各行にカンマ区切りの文字列が含まれる複数の行を持つテーブルで特に問題となる可能性があります。

この問題に対処するには、変更されたクエリを使用して、効果的に重複行を排除しながら値を分割できます。

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
ログイン後にコピー

このクエリでは 2 つの重要な変更が導入されています:

  1. 前の行チェック: PRIOR slno = slno 条件により、同じソース行の行のみが処理されることが保証され、異なる行からの重複行が効果的に防止されます。
  2. ランダム値チェック: PRIOR DBMS_RANDOM .VALUE IS NOT NULL 条件は、行ごとにランダムな値を選択し、すべての分割値が行と行の一意の組み合わせを持つようにします。ランダムな値。

その結果、このクエリは、一意の行識別を維持し、重複行の生成を防ぎながら、コンマ区切りの値を複数の行に効果的に分割します。

以上がOracle で重複行を生成せずにカンマ区切り値を効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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