2011-12-03 6 views
0

table1というテーブルには、null値を持つfield1というフィールドがあります。このクエリは行を返しません:NULL値を含むフィールドを持つSQLテーブル

SELECT * 
FROM table1 
WHERE field1 NOT IN 
(
    SELECT field1 
    FROM table1 
) 

私はこのクエリを書くより良い方法があります。この動作の原因は、null値を含むフィールドではnotを使用することです。

+1

このクエリを返すように期待していますか? – NPE

+0

テーブルは正規化されていません(これは良い考えではありませんが、現時点では何もできません)。私が実行しようとしているクエリは次のとおりです:SELECT * FROM table1 field1 = 'Value1'とfield1ではない(field1 = 'value2'のtable1からfield1を選択)。 field1 = value1のテーブル1のすべての行を検索しようとしていますが、テーブルの他の行のfield1 = value2のものを除外しています。私はこのクエリを書くためのより良い方法があることを認識しています。私の質問は、NULLを含む列でNOT INを使用することです。 – w0051977

+0

このテーブルにプライマリキーフィールドがありますか? –

答えて

2

OK、私はここでのポイントを逃しかもしれないが、あなたの問合せを修正するための1つの方法は次のとおりです。

  • ステップ1:table1.field1のすべての値を取ります。

  • ステップ2:?field1の価値確かにこれは常に空のセットを返し

ステップ1で得られた値の中ではありませんすべてのtable1行を返しますかプライマリキーフィールドがあることが前提で

+0

ありがとうございます。ここに例があります。 (1、 'book'、8) TestTable値(2、 'video'、7)に挿入 TestTable値に挿入します。 (3「ビデオ」、NULL) 選択*タイプ=「著書」 とはしていないindexvalue TESTTABLEから私は1つの行を期待する に返される(タイプ=「映像」のTESTTABLEからindexvalue選択)上記のクエリはありませんが、存在しません。私はこれが が 'indexvalue'にヌル値があると信じています。 – w0051977

0

がテーブルに存在し、このスクリプトを使用することがあります。

select 
    t1.* 
from 
    dbo.Table1 as t1 
where 
    t1.field1 = 'Value1' 
    and not exists(select 1 from Table1 as t2 where t1.ID != t2.ID and t2.field1 = 'Value2') 
+0

ありがとうございましたが、私の元の鬱状態では、私はこのクエリを書くより良い方法があると言いました。私の質問は、特にnullを含む列で 'NOT IN'を使用することに関連しています。 – w0051977

+0

私は私の質問に答える以下の投稿を発見しました:http://stackoverflow.com/questions/173041/not-in-vs-not-exists – w0051977