Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带except的SQL select语句_Sql_Oracle - Fatal编程技术网

带except的SQL select语句

带except的SQL select语句,sql,oracle,Sql,Oracle,我试图生成一个SQL语句,在这里我需要去掉所有具有特定特征的“用户”。这里是一个例子 +------+-------+ | User | Trait | +------+-------+ | A | Fire | | A | Water | | A | Air | | B | Water | | B | Air | | C | Water | | C | Fire | +------+-------+ 有了SQL,我想删除所有与trait

我试图生成一个SQL语句,在这里我需要去掉所有具有特定特征的“用户”。这里是一个例子

+------+-------+
| User | Trait |
+------+-------+
| A    | Fire  |
| A    | Water |
| A    | Air   |
| B    | Water |
| B    | Air   |
| C    | Water |
| C    | Fire  |
+------+-------+
有了SQL,我想删除所有与trait fire相关联的用户

因此,基本上,之后,我们将被留下

+------+-------+
| User | Trait |
+------+-------+
| B    | Water |
| B    | Air   |
+------+-------+
如果我能够使用excel中的某些东西而不是通过SQL过滤掉它,这也会起作用。我一直在寻找各种方法,但从我的尝试来看,大多数方法只会删除带有trait的单行,而不会删除用户

我需要sql来翻译

For (i = table.length; i++)
    If Trait = Fire
        getVal(User(i))
    DeleteRows(User(i))
除了sql之外,我还研究了sql,但是我使用的表要复杂得多,所以使用一个基本示例来提供一些帮助将很好地引导我走向正确的方向


谢谢

最简单的方法是使用
not exists

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

最简单的方法是使用
notexists

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

尝试:


您可以在
不在

SELECT *
FROM mytable
WHERE userid NOT IN (SELECT userid FROM mytable WHERE Trait = 'Fire')

您可以在
不在

SELECT *
FROM mytable
WHERE userid NOT IN (SELECT userid FROM mytable WHERE Trait = 'Fire')

是否从表中删除行?或者只是不选择它们?您可以在两个答案中进行选择,一个使用not IN,另一个不存在。如果
user
(或者是
userid
?)不为空,则它们是等效的。如果可能为空,则NOT IN可能不会产生所需的结果。如果您有一个user=NULL且Trait=Fire的行,那么NULL“Fire”将出现在子查询的结果集中,而NOT in将导致拒绝外部查询中的所有行。在大多数情况下,“不存在”更安全。感谢您提供的信息,幸运的是,所有信息都没有任何空值,因此我能够修复“不存在”并使其正常工作。是否从表中删除行?或者只是不选择它们?您可以在两个答案中进行选择,一个使用not IN,另一个不存在。如果
user
(或者是
userid
?)不为空,则它们是等效的。如果可能为空,则NOT IN可能不会产生所需的结果。如果您有一个user=NULL且Trait=Fire的行,那么NULL“Fire”将出现在子查询的结果集中,而NOT in将导致拒绝外部查询中的所有行。在大多数情况下,“不存在”更安全。感谢您提供的信息,幸运的是,所有信息都没有任何空值,因此我能够修复“不存在”并使其正常工作。非常感谢!我在我的查询中进行了测试,结果很好。非常感谢!我在我的查询中测试了它,它是有效的。