2014-04-08 2 views
0

2 일 이후로이 문제를 해결하기 위해 노력하고 있습니다. 동일한 카운트 값을 가진 두 테이블 간의 내부 조인

나는 두 SQL 선택 문을

SELECT (


) Target 

INNER JOIN 

SELECT (


) Source 

ON Join condition 1 
AND Join condition 2 
AND Join condition 3 
AND Join condition 4 
AND Join condition 5 

목표 테이블을 사용하여 만든 테이블에 10,000 개의 레코드의 카운트 값을 가지고 있습니다. 소스 테이블의 계수 값이 10,000 레코드입니다. 5 조건

나는 9573 개 기록을 얻을 가입에

는하지만 내부 수행 할 때 두 테이블 간의 조인.

기본적으로 원본 테이블과 대상 테이블간에 일대일 일치를 찾으려고합니다. 나는 표적의 모든 표적이 표적의 모든 표적과 일치한다고 느낍니다.

질문 :

  1. 이유는 무엇입니까 내 적은 기록을 제공 조인 내부 두 테이블의 레코드와 동일한 값이있는 경우에도?
  2. 예상되는 경우 조인 조건 이후 정확히 10,000 개의 레코드를 얻으려면 어떻게해야합니까?

답변

0

1) INNER JOIN은 조인 열이 일치하는 두 테이블의 JOINING에서 행만 출력합니다. 그래서 귀하의 경우, 조인 조건 1은 두 테이블의 행에 존재하지 않을 수 있으며 따라서 일부 행은 필터링됩니다.

2) 다른 포스터에서 언급 한 것처럼 왼쪽 결합은 편도입니다. 마스터로 사용하려는 표 소스 또는 표적 (예 : 출발지 및 모든 행 표시)을 찾아야합니다. 그런 다음 조건에 따라 나머지 테이블을 조인하고 조인 조건이 일치하는 모든 열을 추가합니다.

우리가 작업중인 테이블과 달성하고자하는 쿼리 결과를 제공하는 것이 좋습니다.

0

다른 조인에 대한 몇 가지 좋은 기사가 있습니다. 하지만 왼쪽 조인에 관심이있는 것 같습니다. 따라서 Target에 존재하지만 Source에 없으면 레코드를 삭제하지 않습니다.

그래서, 그것은 다음과 같습니다

SELECT(...) Target 
LEFT OUTER JOIN 
SELECT(...) Source 
    ON cond1 and cond2 and cond3 and cond4 and cond5 

는 샷이 나를 어떻게되는지 알려 주시기 것을 줘!

0

가끔은 감정보다는 논리적 분석에 의존해야합니다. 이 쿼리를 사용하여 일치하지 않는 필드를 찾은 후 다음 단계를 수행하십시오.

SELECT 
Target.Col1,Source.Col1, 
Target.Col2,Source.Col2, 
Target.Col3,Source.Col3 
FROM 
(

) Target 
FULL OUTER JOIN 
(

) Source 
ON Target.Col1=Source.Col1 
AND Target.Col2=Source.Col2 
AND Target.Col3=Source.Col3 
WHERE (
Target.Col1 IS NULL 
OR Source.Col1 IS NULL 
OR Target.Col2 IS NULL 
OR Source.Col2 IS NULL 
OR Target.Col3 IS NULL 
OR Source.Col3 IS NULL 
) 
관련 문제