> 데이터 베이스 > 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿