0

こんにちは、はい/いいえの答えを求める表がありますが、はいといいえの両方を言っている人もいます。

person--------------status
1-------------------yes
2-------------------yes
3-------------------yes
3-------------------no
4-------------------no
5-------------------yes
5-------------------no

ここで、人物 3 と 5 には 2 つの行があり、1 つは「はい」、もう 1 つは「いいえ」です。

両方の答えを持つ人を見つけて、「いいえ」と書かれている行を削除したいのです。だから私は次のようになります:

person--------------status
1-------------------yes
2-------------------yes
3-------------------yes
4-------------------no
5-------------------yes

私のロジックは失敗しており、次のものしか取得できません。

delete from table where status = 'no'
and where person in (select person from table where status = 'yes')

もちろん、これは両方のタイプを削除します。

誰か提案はありますか?

4

4 に答える 4

2

and whereは SQL ではありません。これを試して:

delete from table
     where status = 'no' and
           person in (select person from table where status = 'yes')

ロジックは私には正しいようです。

于 2013-04-25T14:23:19.557 に答える
1

余分な があるという構文エラーを修正すると、両方は削除されませwhere。delete where status = 'no'AND別の条件が true と表示されます。レコードを削除するには、両方が true である必要があります。レコードに 'yes' が含まれている場合、条件の 1 つが false であるため、そのレコードの両方の条件が true になることは明らかにありません。

それでは、DB2 でこれを試してみましょう。

create table survey 
  (person smallint
  ,answer   varchar(5)
  );

insert into survey
  values (1, 'yes'),
         (2, 'yes'),
         (3, 'yes'),
         (3, 'no'),
         (4, 'no'),
         (5, 'yes'),
         (5, 'no');

これは私に与えます

person  answer
------  ------
  1     yes 
  2     yes 
  3     yes 
  3     no  
  4     no  
  5     yes 
  5     no  

というわけで、いよいよテスト

delete from survey 
  where answer = 'no'
    and person in (select person 
                     from survey 
                     where answer = 'yes'
                  );

私のテーブルは今持っています

person  answer
------  ------
  1     yes 
  2     yes 
  3     yes 
  4     no  
  5     yes 

明らかに両方のタイプが削除 されておらず、望ましい結果が得られています。

私は DB2 for i 7.1 を使用していますが、おそらく他の人は DB2 LUW を使用しています。ANDしかし、基本的な SQL がどのように機能するか (など) の基本的なロジックが、異なる IBM プラットフォーム間で大幅に異なる働き をすることを想像するのは非常に難しいと思います。

于 2013-04-26T00:34:07.430 に答える