ホームページ > データベース > mysql チュートリアル > Oracle でカンマ区切り値を分割するときに行の重複を回避するにはどうすればよいですか?

Oracle でカンマ区切り値を分割するときに行の重複を回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-01 05:30:09
オリジナル
535 人が閲覧しました

How to Avoid Duplicate Rows When Splitting Comma-Separated Values in Oracle?

複数のカンマ区切り値を重複せずに複数の Oracle テーブル行に分割する

Oracle の CONNECT BY を使用してカンマ区切りデータを複数の行に分割する場合および正規表現を使用すると、重複した行が発生する可能性があります。以下は、重複した結果を生成していた元のクエリです:

WITH CTE AS (
    SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL
    UNION
    SELECT 'f,g', 2 from dual
    UNION
    SELECT 'h', 3 FROM DUAL
)

SELECT TRIM(REGEXP_SUBSTR(TEMP, '[^,]+', 1, LEVEL)), SLNO
FROM CTE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp, '[^,]+')) + 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
ログイン後にコピー

説明:

  • REGEXP_COUNT 関数は、次の数を決定するために使用されます。各文字列のカンマ区切りの値。
  • PRIOR 演算子は、slno 列に基づいて現在の行が前の行に接続されていることを確認します。
  • DBMS_RANDOM.VALUE 関数はランダムな値を生成し、パーティション化プロセスにランダム性を導入するために使用され、重複行の生成を防ぐのに役立ちます。

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

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