0

(Tab1 and Tab2)との値の不一致をチェックする必要がある次の 2 つのテーブルがT1Col3ありT2Col3ます。これら2つのテーブルのリンク列T1Col1, T1Col2T2Col2, T2Col2

しかし、次のクエリを実行すると、必要な正確なレコードが得られません

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

サンプルデータ

タブ1

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

タブ 2

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

強調表示されたレコードを削除するにはどうすればよいですか。これは、重複レコードの一致が原因で発生すると思います

乾杯

シャバー

4

1 に答える 1

0

不一致の 3 番目の列を削除する場合は、3 番目と内部結合が必要です。

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 アクセスの場合

  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
于 2013-03-08T04:44:49.660 に答える