2013-02-19 4 views
0

다음 쿼리가 있으며 MS Access의 불일치 열 레코드를 가져와야합니다.MS Access의 열 비교 SQL 문제

문제는, 매칭

쿼리

SELECT 
    T1Col1, 
    T1Col2, 
    T2Col1, 
    T2Col2 
FROM T1 
INNER JOIN T2 
    ON T1.Col1 = T2.Col1 
WHERE T1.Col2 <> T2.Col2 

내가 정확하지 않은 결과의 종류 아래 얻고 실행 한 후 제대로 발생하지 않습니다 동일한 링크 열 값에 하나 개 이상의 기록이있을 때입니다

T1Col1 T1Col2 T2Col1 T2Col2 

abc  ccc abc  eee 
abc  eee abc  ccc 

이상적으로 위의 레코드는 일치하는 결과 집합으로 반환하지 않아야합니다 (일치하지 않는지 확인).

T2Col1 T2Col2 

jkl sss 
efg uuu 
efg mmm 
abc eee 
abc ccc 

예상 결과가

T1Col1 T1Col2 T2Col1 T2Col2 

jkl  ttt jkl  sss 
efg  qqq efg  uuu 
+4

어떻게 해결되지 않는 이유는 무엇입니까? t1.col2와 t2.col2는 샘플 결과 행 중 어느 것과도 같지 않습니다. 이는 정확히 SQL 문에 입력 한 행입니다. –

+0

업데이트 용 Thax Marc. T1 및 T2 데이터를 별도로 확인하면 초기 게시물을 편집 한 것입니다. 결과 레코드가 일치해야합니다. 불일치로 넣은 쿼리에서 선택됩니다. – shabar

+1

죄송합니다. 여전히 의미가 없습니다. 이제 두 개의 결과 세트가 있습니다. 하나의 쿼리에서 두 개의 결과를 얻을 수 없습니다. 너 뭐하려고? "열 레코드 불일치"란 무슨 뜻입니까? 원본 테이블 두 개에있는 데이터의 더 큰 예제를 제공 할 수 있습니까? 각 테이블의 행은 15-20 개이며, 반환 할 단일 테이블의 예는 무엇입니까? – Joe

답변

0

될 것이라고 나는 올바른 결과

T1

T1Col1 T1Col2 

jkl  ttt 
efg  qqq 
efg  mmm 
abc  ccc  
abc  eee  

T2 얻기 위해 쿼리에서 아무것도를 변경해야합니까 나는 이것이 의심 가장 효율적인 솔루션이지만 작동 할 것입니다.

간단한 조인의 문제점은 T2의 모든 레코드가있는 T1의 모든 레코드에 대한 데카르트 조인을 수행 한 다음 조건에 맞지 않는 레코드를 삭제하는 것입니다. 따라서 영어 나 (또는 ​​모국어가 아닌) 선택한 언어와 일치하는 쿼리를 수행하지 않기 때문에 요청하지 않은 결과를 얻을 수 있습니다. 그렇게 SQL은 훌륭합니다. 대부분의 경우, 당신이 원하는 것을 소리내어 말하면 정확하게 SQL이 일치합니다.

은 당신이 원하는 무엇 : COL1과 COL2에 대해 동일한 값 T2에는 행이없는 경우

는 T1에서 해당 행을 선택합니다. 그런 다음 T2에서 해당 행을 선택합니다. 여기서 은 T1에 행이없고 COL1 및 COL2에 대해 동일한 값을 갖습니다. 그런 다음 을이 두 결과 세트를 COL1에 의해 서로 일치시킵니다.

그래서, 여기 당신은 간다 :

create table t3 as 
    select * from 
    (select * from t1 where not exists (select 1 from T2 where T1col1=t2col1 and t1col2=t2col2)) M1, 
    (select * from t2 where not exists (select 1 from T1 where T1col1=t2col1 and t1col2=t2col2)) M2 
    where M1.t1col1=M2.t2col1; 
+0

안녕하세요 조, 여기 Col1 두 테이블에 합류 키입니다. Col2는 우리가 불일치를 찾아야 만하는 열입니다. – shabar

+1

네, 질문은 뭐니? 이것이 바로 코드가하는 것입니다. – Joe

+0

Thax Joe가 포인트를 얻었습니다. 환호를 혼동해서 죄송합니다. – shabar