oracle SQL을 사용하여 작업하십시오. 두 개의 테이블이 있습니다. 첫 번째는 숫자 범위를 포함하고 두 번째 숫자는 숫자를 포함합니다. 내가 필요한 결과는 첫 번째 테이블과 첫 번째 테이블 번호 범위에없는 두 번째 테이블의 번호입니다. 나는이 솔루션을 가지고SQL 쿼리 성능이 느립니다. 숫자 범위와 숫자
table ranges
LOW_RANGE HIGH_RANGE
1000000000000000000 1000000099999999999
4253525250000000000 4253525259999999999
4352000000000000000 4352999999999999999
table numbers
NUMBER LENGTH (implies that the rest of the numbers are 0-9 range)
100000000000 12(max)
100000000051 12
425252525100 10
435252525000 9
425353000000 6
797689600000 9
needed result:
LOW_RANGE HIGH_RANGE
100000000000 100000009999 (ranges)
425252525000 425252525999 (ranges)
435200000000 435299999999 (ranges)
425353000000 425353999999
797689600000 797689600999
:
작동하지만 큰 데이터 세트에 대한 매우 느립니다SELECT
SUBSTR(ranges.LOW_RANGE,1,9)||'000'
,SUBSTR(ranges.HIGH_RANGE,1,9)||'999'
FROM
ranges
UNION ALL
SELECT
numbers.NUMBER
,RPAD(SUBSTR(numbers.NUMBER,1,numbers.NUMBERLENGTH),12,'9')
FROM
numbers b
WHERE b.NUMBER NOT IN
(
SELECT b.NUMBER
FROM ranges a
WHERE b.NUMBER BETWEEN SUBSTR(a.LOW_RANGE,1,9)||'000' AND SUBSTR(a.HIGH_RANGE,1,9)||'999'
)
. 다른 빠른 솔루션이 있습니까?
수정 : 수정 된 질문
성능에 대해 우려되는 경우 문자열 작업과 함께 수행중인 실제 작업을 표시하십시오. 이것은 성능에 큰 차이를 만듭니다. –
흠, 네 말이 맞아. 문자열 연산을위한 수정 된 질문. 이러한 문자열 연산과 기타 중요하지 않은 필드에 대한 몇 가지 디코드가 유일한 연산입니다. – llll