2017-12-18 5 views
0

特定の列が重複しているレコードを除外しようとしています。この最後の/最初の名前のテーブルに一致する 'Y'レコードがない場合、そのフラグに 'N'を持つ行を表示するためにこのクエリを構築しました。これらの2つの「not in」クエリの結果が異なるのはなぜですか?

select * from Table where LName+FName not in 
(select LName+FName from Table where FLAG = 'y') 

しかし、これは0の結果が戻ってきます。内側のクエリは期待される結果を返します。内側のクエリを実行し、以下のような結果値を手動で貼り付けると、結果とともに実行されます。

select * from Table where LName+Fname not in ('DoeJohn','AbelAdam') 

ここでは正確に何が起こっていますか?

+1

あなたは表の別名を追加してみて、問題がまだ存在するかどうかを確認することができ、例えば、 '選択*表からどこa.LName + a.FNameません。 (表bのb.LName + b.FNameを選択します。b.FLAG = 'y') '? – a1ex07

+0

両方のテーブルの動作に変更はありません。 – user9114357

+0

クエリのどちらの部分にも 'null'という名前がありますか? 'not in(list、including、null)'は常に不確定を返すので(連結した 'null'の場合は' null'を返すべきです)。道徳的です:問題を示すデータのサンプルを表示する必要があります。 –

答えて

1

NULL値がある場合、NOT INが失敗することをお勧めします。あなたはNOT EXISTSを使用したり、任意のnull値をフィルタリングのいずれか試すことができます。

select * from Table where LName+FName not in 
     (select LName+FName from Table where FLAG = 'y' AND LName+FName IS NOT NULL) 
+0

これは問題のようです。一部のLName値はNullです。空の文字列に更新して、クエリが期待どおりに実行されます。ありがとうございました! – user9114357

関連する問題