>데이터 베이스 >MySQL 튜토리얼 >중복 행을 생성하지 않고 Oracle에서 쉼표로 구분된 값을 효율적으로 분할하려면 어떻게 해야 합니까?

중복 행을 생성하지 않고 Oracle에서 쉼표로 구분된 값을 효율적으로 분할하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-01 06:29:10526검색

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

Oracle 테이블의 여러 쉼표로 구분된 값을 고유 행으로 분할

oracle에서는 쉼표로 구분된 값을 여러 행으로 분할하는 것이 일반적입니다. 정규식과 CONNECT BY 절을 사용합니다. 그러나 자주 발생하는 문제 중 하나는 중복 행이 생성되는 것입니다. 이는 각 행에 쉼표로 구분된 문자열이 포함된 여러 행이 있는 테이블에서 특히 문제가 될 수 있습니다.

이 문제를 해결하려면 수정된 쿼리를 사용하여 중복 행을 효과적으로 제거하면서 값을 분할할 수 있습니다.

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

이 쿼리에는 두 가지 주요 수정 사항이 도입됩니다.

  1. 이전 행 확인: PRIOR slno = slno 조건은 동일한 소스 행의 행만 처리되도록 보장하여 다른 행의 중복 행을 효과적으로 방지합니다.
  2. 무작위 값 확인: PRIOR DBMS_RANDOM .VALUE IS NOT NULL 조건은 각 행에 대해 무작위 값을 선택하여 모든 분할 값이 행과 무작위의 고유한 조합을 갖도록 보장합니다. value.

결과적으로 이 쿼리는 고유한 행 식별을 유지하고 중복 행이 생성되는 것을 방지하면서 쉼표로 구분된 값을 여러 행으로 효과적으로 분할합니다.

위 내용은 중복 행을 생성하지 않고 Oracle에서 쉼표로 구분된 값을 효율적으로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.