0

嗨,我有一张桌子要求一个人回答是/否,但是有些人说是和否,即:

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

其中第 3 个人和第 5 个人有两行,一排代表“是”,一排代表“否”。

我想找到两个答案的人,并删除说“不”的行。所以我最终得到:

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

好吧,这是一种方式(也会有其他方式)。

delete from table 
where status = 'no' and
      person in (select person from table 
                 where status in ('no', 'yes')
                 group by person 
                 having count(distinct status)>1)
于 2013-04-25T14:24:52.550 回答
1

编辑:您的解决方案应该可以工作,除了多余的“哪里”。

于 2013-04-25T14:26:01.090 回答
1

一旦你修复了额外的语法错误,它就不会删除where两者。它说 delete where status = 'no'AND另一个条件为真。两者都必须为真才能删除记录。如果记录为“是”,则显然该记录的条件不能同时为真,因为其中一个为假。

所以让我们在 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。但我发现很难想象基本 SQL 工作方式的基本逻辑(例如AND)在不同的 IBM 平台上的工作方式会有很大的不同。

于 2013-04-26T00:34:07.430 回答