2017-02-21 9 views
1
A B C 
1 bob 55 0 
2 bob 55 1 

where句で私の助けが必要です。上記の例では、Bobに2つのレコードがあることを示していますボブのレコードのすべてがC列に1の値を持っている場合にのみ、レコードを表示したいとします。ボブのレコードの値の1つが0の場合、ボブには何も返しません。SQL where句ヘルプが必要です

select t.* 
from t 
where not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.c <> 1 
       ); 
+0

の値を持つcの列を想定すると、 - 0と1はC列の唯一の値ですか?それは 'ヌル'になることができますか?また、「A」や「B」は「ヌル」になることはありますか?そして、もしあなたが 'bob 55 1'で2つの同じ行を持っていれば、両方を返す必要がありますか? (つまり、存在する場合は、ベーステーブルから複製を保持しますか?)または、入力に重複がないことが保証されていますか? – mathguy

+0

列Cの値は0と1のみです。 – user3007002

答えて

1

の値を持つ一つのレコードを返すために取得することができますよ次のようにNOT EXISTSを試してください。

select a, b, c 
    from table t 
    where t.b = 55 and not exists (select 1 from table t2 
    where t2.b=t.b and t2.c=0) 
+0

皆様のおかげです。 – user3007002

0

:現在、私は唯一の最も簡単な方法は、not existsを使用することがおそらくそれは1

既存のクエリ

select a, b, c 
from table 
where b = 55 and c = 1 
0

サブクエリを作成すると、 1と等しいレコード。それが発生した場合は、それらを含めることはありません。

select a, b, c 
    from table as t 
    where not exists (
     select * 
     from table as t1 
     where t.a = t1.a and IsNull(t1.c, -1) <> 1 
    ) 

この方法では、それが発生する可能性が列cの値のどのような様々な問題ではありません、彼らはあなたがあなたのデータに慣れていないだけの場合には(あなたには、いくつかのNULLを取得しても、レコードを持っています。 )。かっこ内のサブクエリは、他の基準が必要かどうかをテストするために単独で実行できます。

あなたはこのテーブルに参加して同様のことを達成することができますが、このコード例は意図していると思います。

1

私は少し修正SQLは(ゴードンによってspec'd WHERE句を含む)を示唆している:

select t.a, t.b, t.c 
from table t 
where t.b = 55 and t.c = 1 and not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.b = t.b and t2.c = 0 
       ); 

マッシミーノのソリューションも働くしかだから、1または2

+0

"値は1または0です"と私はもちろん意味しました。 – datadevelopr