时间:2016-07-28 20:31:30

标签: sql oracle

我正在尝试生成一个SQL语句,我需要摆脱所有具有某种特征的'用户'。这是这里的例子

+------+-------+
| User | Trait |
+------+-------+
| A    | Fire  |
| A    | Water |
| A    | Air   |
| B    | Water |
| B    | Air   |
| C    | Water |
| C    | Fire  |
+------+-------+

使用SQL我想删除所有具有与之关联的特征的用户。

所以基本上,之后,我们会留下

+------+-------+
| User | Trait |
+------+-------+
| B    | Water |
| B    | Air   |
+------+-------+

如果我能够在excel中使用某些东西来过滤而不是通过SQL,那么这也可以。我一直在寻找各种各样的方法,但是从我尝试过的,大多数只会删除具有特征的单行,但不会删除用户。

我需要sql来翻译

中的内容
For (i = table.length; i++)
    If Trait = Fire
        getVal(User(i))
    DeleteRows(User(i))

我看了sql除外,但是我正在使用的表格要复杂得多,所以使用基本示例的一些帮助会很好地引导我朝着正确的方向前进。

由于

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用not exists

select * 
from tablename t
where not exists (select 1 from tablename where userid = t.userid and Trait = 'Fire')

答案 1 :(得分:1)

您可以使用子选项并使用NOT IN

放弃用户ID
SELECT *
FROM mytable
WHERE userid NOT IN (SELECT userid FROM mytable WHERE Trait = 'Fire')

答案 2 :(得分:0)

尝试:

select a.user, a.trait
  from the_table a
 where not exists
( select null
    from the_table b
   where b.user = a.user
     and b.trait = 'Fire'
);