0

SQL サーバーの元のテーブルを更新テーブルと比較しています。「最初の数字」がいくつ変更されたかを調べています。彼らはこのシステムで変化します。しかし、このクエリは、両方のテーブルに等しい「最初の番号」を返すようです。私は何を間違っていますか?

select *
from   
    tblBlue
where  
    Exists (Select 'x'
            From tblRed
            Where tblRed.FirstNumber != tblBlue.FirstNumber 
              and tblRed.ID = tblBlue.ID)

サンプルデータ:

tblRed
ID  FirstNumber
1   10 
2   20
3   30
4   40

tblBlue
1   5
2   20
3   35
4   40

私は見ることを期待します:

1   5
3   35
4

2 に答える 2

1

クエリは機能するはずです ( SQL Fiddle の例を参照してください)。間違った結果を返すサンプル データを投稿できますか?

それを書くための少し明確な方法:

select  *
from    tblBlue new
join    tblRed old
on      new.ID = red.ID
where   new.FirstNumber <> old.FirstNumber
于 2013-03-29T14:52:47.093 に答える
1

より簡単な解決策: 左結合を使用する

SELECT r.*
FROM tblRed r
LEFT JOIN tblBlue b ON b.ID = r.ID AND b.FirstNumber = r.FirstNumber
WHERE b.ID IS NULL

tblRedこれにより、次の 2 つの条件のいずれかを満たす のレコードが返されます: 1)IDでさえ見つからないtblBlue、つまり新しいレコード。または 2) ID は見つかりましたが、番号が変更されています。両方IDが同じであり、同じであるFirsTNumber場合、b.IDNULL にはならないため、一致するため、異なる値の結果セットから除外できます。

于 2013-03-29T14:53:46.157 に答える