2013-02-19 87 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 

理想情况下,上面的记录不应该返回结果集作为那些匹配(检查不匹配的结果集)。我是否需要更改查询任何事情来得到正确的结果

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

它怎么不正确? t1.col2和t2.col2在任何一个样本结果行中都不相等,这正是您放入SQL语句的内容。 – 2013-02-19 03:51:12

+0

Thax为您的更新Marc。我的意思是编辑我的第一篇文章,如果你单独检查T1和T2数据。那些结果记录应该匹配,这是在查询输出作为不匹配 – shabar 2013-02-19 04:09:45

+1

对不起,这仍然没有任何意义。现在你有两个结果集 - 你不能从一个查询中得到两个结果。你想做什么? “不匹配的列记录”是什么意思?您能否在两张原始表格中给出更大的数据示例,每张表格中可能有15-20行,然后是您想要返回的单个表格的示例? – Joe 2013-02-19 04:13:11

回答

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; 
+0

嗨,乔,这里Col1是两个表中的加入密钥。 Col2是我们应该找到的不匹配的列。 – shabar 2013-02-19 05:58:38

+1

当然,你的问题是什么?这就是代码所做的。 – Joe 2013-02-19 06:10:24

+0

萨克斯乔得到了重点。对不起,你干杯干杯 – shabar 2013-02-19 06:30:58