2017-04-10 8 views
0

다음 쿼리를 Teradata에 맞게 최적화 할 수 있습니까?(Teradata 버전) - 다른 레코드에 모든 레코드와 다른 레코드를 모두 얻습니다.

우리는 즉, 고유하지 않은 키

또는에 일치하는이 작은 테이블 A의 모든 기록, 플러스 대형 테이블 B의 모든 해당 기록을해야합니다 모든 것을 모든 A의 일치가없는 B에서 제외

어쩌면 JOIN이있는가요? 또는 비 상관 쿼리 인 Subselect는 Teradata에도 적용됩니까?

감사합니다.

========= noncorrelated 하위 쿼리와 this MySQL question에 quanos 답변에 따라 업데이트 ====
, 다음과 같은 것입니다 문은 테라 데이타에서 빨리도 수? 나는 현재 테라 데이타에서 테스트 할 수 없습니다

SELECT a.nonunique 
     , a.colX 
    FROM small_tab a 
UNION ALL 
SELECT b.nonunique 
     , b.colY 
    FROM large_tab b 
WHERE b.nonunique IN 
(
    SELECT DISTINCT nonunique 
     FROM small_tab 
    GROUP BY nonunique 
) 

+0

'UNION'이 정말로 필요합니까? 분명한 처리는 엄청난 오버 헤드이며, 'UN ALL'이 더 빠를 것입니다. – dnoeth

+0

덕분에, 나는 그것을 감독했다. 그것은 내가 처음 사용했던 다른 선택에서 왔는데, 덜 효과적이라고 생각합니다 (중복 된 항목을 포함하는 조인을 포함). 업데이트 됨. – Rusty75

답변

0

나는 그것이 오타인지 모르겠지만, 당신은 WHERE 절 후 중복 선택 쿼리가 .. 집에서 Oracle 인스턴스가 있습니다. 또한 WHERE Claue에서 사용되는 SELECT 쿼리에서 동일한 열 이름을 사용해야합니다. 아래의 쿼리는 Teradata에서 올바르게 작동합니다.

SELECT a.nonunique, a.colX 
FROM small_tab a 
UNION ALL 
SELECT b.nonunique, b.colY 
FROM large_tab b 
WHERE b.id IN(
    SELECT **id** 
    FROM small_tab) 

희망이 있습니다. 위 쿼리에 대한 질문이 있으면 알려주십시오.

+0

안녕하세요. 오타가 아닌 의도적 인 추가 subselect는 select 내부를 비 상관 서브 쿼리로 강제합니다. 언급 된 링크를 참조하십시오. 이것은 MySQL에서 작동하며 Teradata에서 더 많은 성능을 발휘하는지 궁금합니다. – Rusty75

+0

실제로 다른 오타를 만들었습니다. id가 일치하지 않았지만 비 고유 ... 따라서 나는 DISTINCT를 추가했습니다. – Rusty75

+0

ok - 또 다른 의견입니다. 의심의 여지가 있는지 여부에 관해서는 우리가 정말로 그 게시물에 언급 된이 추가 subselect이 필요 ... 나는 당신의 요점을보고, 그것은 조금 쓸모없는 것 같다 ...? MySQL의 결함 일 수 있습니다. 그것을 제거 .. .. – Rusty75