如何过滤掉特定集的多个值

时间:2014-01-16 16:27:11

标签: sql select

在此示例中,如何过滤掉10岁男性?我不想过滤掉所有男性或所有10岁的孩子。另外,我不想指定要过滤的属性列表,只是要过滤掉的属性!

示例数据和表格:

sqlite> create table person ( age int, gender char(1), name varchar(10));
sqlite> insert into person values (10,'f','Anoushka');
sqlite> insert into person values (10,'m','James');
sqlite> insert into person values (30,'f','Mei');
sqlite> insert into person values (30,'m','Ahmed');

我使用了这个返回我想要的数据的选择,但有更好的方法吗?

sqlite> select *
   ...> from person
   ...> where age || gender != '10m';
10|f|Anoushka
30|f|Mei
30|m|Ahmed

2 个答案:

答案 0 :(得分:1)

select *
from person
where age != '10'
or gender != 'm';

答案 1 :(得分:0)

我确实找到了另一种方式。你只需要我们or逻辑,我很少使用它,但它派上用场。

sqlite> select *
   ...> from person
   ...> where (age != 10 or gender != 'm');
10|f|Anoushka
30|f|Mei
30|m|Ahmed

排除10岁男性的另一种方法是简单not过滤。这个选项对我来说更容易阅读。

sqlite> select *
   ...> from person
   ...> where not (age = 10 and gender = 'm');
10|f|Anoushka
30|f|Mei
30|m|Ahmed

另见De Morgan's Laws“not(A和B)”与“(不是A)或(不是B)”

相同