2011-07-28 2 views
1
SELECT something FROM somewhere WHERE something IN (a, b, c) 

は正常な結果を生成し、そして、奇妙NOT IN演算子の動作は

SELECT something FROM somewhere WHERE something NOT IN (a, b, c) 

がどこかのテーブルでくれ列何かからすべての結果を与える必要がありますが、それは私に、よりランダムに行を繰り返し何度も与えますテーブルの中にあるよりも。インターネット上のNOT INのすべての例は文字列であり、私は数字で作業していますが、何か別のものがありますか?

+3

'select'ステートメントは本当に簡単ですか、複数のテーブルを結合していますか? – meagar

+1

いいえ。あなたのデータに何か問題があるはずです。 ** IN/NOT IN **操作は、記述したとおりに動作するはずです。 –

+0

また、 'not in()'を数字に使うための特別な規則はありません。期待どおりに動作します。実際の質問を含めるために質問を更新してください。なぜなら、あなたの質問に答えることができないからです。「in/not in」はあなたが記述しているように振る舞いません。 – meagar

答えて

1

結果に「何度も」の行を受け取ることは、ほとんどの場合、不適切な結合の結果です。 FROM句のJOIN文および/またはWHERE句で指定したテーブル関係を調べます。

FROM句に、SELECT文の他のテーブルに正しく結合されていないテーブルを含めないように注意してください。

幸運を祈る!

+0

ええ、PostgreSQLがエラーを出してINテストが私に正しい結果を返してくれない場合、どうすれば不適切な結合がないかをテストできますか? – Euphorbium

4

「本物」のクエリがなければ、それは何が起こっているのか言うのは難しいです...

TATが言った、とマイケルの答えに追加して、あなたがnot in句でNULL値を持っていないことを確認してください、などセマンティクスは、一見反対の句とはかなり異なっています。

select a from b where a in (1, null);  -- rows where a = 1 
select a from b where a not in (1, null); -- no rows, since x <> null is null 
+0

nullは一致しません。値に一致しません。つまり、 'is null'以外のすべてのテストは常にfalseです。リスト内の値の1つだけがnullの場合、比較は常にfalseになります – Bohemian

関連する問題