MS Access中的列比较SQL问题

时间:2013-02-19 03:49:37

标签: sql ms-access

我有以下查询,需要在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

1 个答案:

答案 0 :(得分:0)

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

简单连接的问题在于,您正在使用T2中的所有记录对T1中的所有记录执行笛卡尔连接,然后删除不符合条件的记录。因此,您得到的结果是您不需要的,因为您没有进行与您的英语(或您选择的母语)相匹配的查询。 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;