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