0

次のクエリがあり、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
4

1 に答える 1

0

これが最も効率的な解決策であるとは思えませんが、うまくいくでしょう。

単純な結合の問題は、T1 のすべてのレコードと T2 のすべてのレコードのデカルト結合を実行し、基準に適合しないレコードを削除していることです。したがって、あなたの英語 (または選択した母国語) に一致するクエリを実行していないため、求めていない結果が得られます。SQL はその点で優れています。ほとんどの場合、必要なことを大声で言うだけで、SQL は正確に一致します。

あなたが欲しいもの:

COL1 と COL2 の値が同じである行が T2 にない場合、T1 から行を選択します。次に、COL1 と COL2 の値が同じである行が T1 にない T2 から行を選択します。次に、これら 2 つの結果セットを 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;
于 2013-02-19T04:31:46.367 に答える