0

我有以下查询,需要在 MS Access 中获取不匹配的列记录。

问题是当有多个记录具有相同的链接列值时,匹配不正确

询问

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

理想情况下,上述记录不应在结果集中作为匹配返回(检查不匹配的记录)。我是否需要更改查询中的任何内容以获得正确的结果

T1

T1Col1  T1Col2 

jkl     ttt
efg     qqq
efg     mmm
abc     ccc    
abc     eee    

T2

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

1 回答 1

0

我怀疑这是最有效的解决方案,但它会起作用。

简单连接的问题在于,您正在执行 T1 中的所有记录与 T2 中的所有记录的笛卡尔连接,然后删除不符合条件的记录。因此,您会得到不需要的结果,因为您没有执行与您的英语(或您选择的母语)匹配的查询。SQL 在这种情况下很棒——大多数时候,如果你只是大声说出你想要的东西,SQL 就会完全匹配。

你想要什么:

从 T1 中选择那些在 T2 中没有具有相同 COL1 和 COL2 值的行的行。然后从 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;
于 2013-02-19T04:31:46.367 回答