找出不匹配记录

时间:2013-03-08 03:48:12

标签: sql ms-access-2007

我有两个表(Tab1 and Tab2),我需要检查T1Col3T2Col3的不匹配值。 这两个表的链接列为T1Col1, T1Col2 T2Col2, T2Col2

但是当我运行以下查询时它没有提供我想要的确切记录

SELECT * FROM Tab1 INNER JOIN Tab2
ON T1Col1 = T2Col1
AND T1Col2 = T2Col2
WHERE T1Col3 <> T2Col3

示例数据

TAB1

T1Col1  T1Col2  T1Col3

jkl nnn qoq
efg Aaa wow
efg xxx yoy
abc iii ror
abc fff uou
abc rrr rr3
gdg ppp 123
abc www 234
jkl qqq 336
jkl nnn 888

TAB2

T2Col1  T2Col2  T2Col3

jkl nnn qoq
efg aaa wow
efg xxx yoy
abc fff uou
ABC iii ror1
abc rrr kok
gdg ppp 789
jkl nnn utu
jkl qqq 336

结果

T1Col1  T1Col2  T1Col3  T2Col1  T2Col2  T2Col3

jkl      nnn    888      jkl    nnn     qoq 
abc      iii    ror      abc    iii     ror1
abc      rrr    rr3      abc    rrr     kok
gdg      ppp    123      gdg    ppp     789
jkl      nnn    888      jkl    nnn     utu 
jkl      nnn    qoq      jkl    nnn     utu    

以上结果的不需要的记录

jkl nnn 888 jkl nnn qoq
jkl nnn qoq jkl nnn utu

如何摆脱突出显示的记录。我认为这是由于匹配重复记录而发生的

干杯

Shabar

1 个答案:

答案 0 :(得分:0)

如果你想删除不匹配的第三列,你只需要第三个和内连接:

SELECT * FROM @Tab1 INNER JOIN @Tab2
ON T1Col1 = T2Col1
AND T1Col2 = T2Col2
AND T1Col3 = T2Col3

<强>更新

Select * From
(
    Select * From tab1
    Except
    Select * From tab2
)tbl
Inner Join 
(
    Select * From tab2
    Except
    Select * From tab1
)t2
On tbl.T1Col1=t2.T2Col1
And tbl.T1Col2=t2.T2Col2

对于MS Access

  Select * From
(
    Select t1.* From Tab1 t1
    Left Join  Tab2 On t1.T1Col1=T2Col1 And  t1.T1Col2=T2Col2 And t1.T1Col3=T2Col3
    Where T2Col1 Is Null And  T2Col2 Is Null And  T2Col3 Is Null
)tbl
Inner Join 
(
    Select t2.* From  Tab2 t2
    Left Join Tab1 t1 On t1.T1Col1=t2.T2Col1 And  t1.T1Col2=t2.T2Col2 And t1.T1Col3=t2.T2Col3
    Where t1.T1Col1 Is Null And  t1.T1Col2 Is Null And  t1.T1Col3 Is Null

)t2
On tbl.T1Col1=t2.T2Col1
And tbl.T1Col2=t2.T2Col2