2017-02-21 2 views
-1

다음은 내 삽입 쿼리입니다. 구분 절이있는 왼쪽 결합

INSERT INTO /*+ APPEND*/ TEMP_CUSTPARAM(CUSTNO, RATING) 
SELECT DISTINCT Q.CUSTNO, NVL(((NVL(P.RATING,0) * '10.0')/100),0) AS RATING 
FROM TB_ACCOUNTS Q LEFT JOIN TB_CUSTPARAM P 
ON P.TEXT_PARAM IN (SELECT DISTINCT PRDCD FROM TB_ACCOUNTS) 
AND P.TABLENAME='TB_ACCOUNTS' AND P.COLUMNNAME='PRDCD'; 
쿼리, P.TEXT_PARAM=Q.PRDCD의 이전 버전에서

하지만 TEMP_CUSTPARAM에 삽입하는 동안 인해 CUSTNO에 고유 제한 조건 위반에

.

삽입 쿼리가 완료 될 때까지 시간이 오래 걸리고 있습니다. LEFT JOIN 문과 별개로 사용하는 방법을 알고 싶습니다.

감사합니다.

+0

SELECT 부분으로 연습하십시오. (그리고 INSERT가 SELECT로 끝나면) 샘플 테이블 데이터와 SELECT의 예상 결과를 추가 할 수 있습니까? (서식있는 텍스트와 마찬가지로) – jarlh

+0

내부 변경으로 선택 내부 조인 (Inner Join)으로 변경해야합니다. – Veljko89

+1

ON 절의 Q.CUSTNO에 대한 조건부가 누락되었을 가능성이 있습니까? 거기에 참조 된 테이블 Q의 열이 없습니다 .... –

답변

1
SELECT T1.Col1, T2.Col2 FROM Table1 T1 
    Left JOIN 
(SELECT Distinct Col1, Col2 FROM Table2 
) T2 ON T2.Id = T1.Id 
0

당신은 그들의 관련 TB_ACCOUNTS/PRDCD TB_CUSTPARAM 기록과 TB_ACCOUNTS 기록을 가입 기준을 누락하고이를 대신 가입하여 크로스. 쿼리가 완료 먼저 실행 계획을 확인 복용 나이입니다

INSERT INTO /*+ APPEND*/ TEMP_CUSTPARAM(CUSTNO, RATING) 
SELECT DISTINCT 
    Q.CUSTNO, 
    NVL(P.RATING, 0) * 0.1 AS RATING 
FROM TB_ACCOUNTS Q 
LEFT JOIN TB_CUSTPARAM P ON P.TEXT_PARAM = Q.PRDCD 
         AND P.TABLENAME = 'TB_ACCOUNTS' 
         AND P.COLUMNNAME = 'PRDCD'; 
0

경우 : 나는 당신이 원하는 것 같아요. here - 두 개의 중요한 테이블에 직교 결합이있는 경우 아마도 쿼리를 다시 방문해야합니다.

쿼리에 대한 기대치를 묻지 마십시오.

CUSTNO 당 하나의 레코드가 있습니까? 또는 고객이 등급을 두 개 이상 가질 수 있습니까?

고객 당 한 번의 reting이 비즈니스 관점에서의 의미를 가질 수 있습니다.

1) 고유 고객 목록을 얻으려면 먼저 DISTINCT 절과 함께 완료되지 않은 generel에 있음을 유의하십시오. 그러나 필터 조건자를 가진 고객 당 더 많은 행이 있다면. 가장 최근의 행을 선택합니다.

2) 등급 테이블에 가입하는 것보다

관련 문제