从数据库中选择没有值组合的项目

时间:2014-09-15 08:00:05

标签: mysql

在我的表中,我有两列:已完成和已关闭。我想要一个选择,显示所有没有BOTH值为1的项目。这是我正在尝试但它不会显示其中一个在1而另一个在0的项目:

 select * from `operations` where (`finished` != 1 and `closed` != 1) 

3 个答案:

答案 0 :(得分:3)

 select * from `operations` where (`finished` != 1 or `closed` != 1) 

应该做的伎俩,或者

 select * from `operations` where !(`finished` = 1 and `closed` = 1) 

您可以使用英语句子进行解码。我的意思是,"两个值均为1"相当于finished=1 and closed=1,然后"没有两个......"就像not那样,!(finished=1 and closed=1)

答案 1 :(得分:1)

1处没有两个值的项目将有一个另一个非1

因此你需要:

select * from `operations`
where `finished` != 1 or `closed` != 1

将值简化为10,您会看到:

finished  closed  result
--------  ------  ------
       0       0    T
       0       1    T
       0       0    T
       1       1    F

这是你的问题的一个解读。另一个(虽然不太可能)是你想要知道哪些行在1而不是另一个的一个值。您可以通过以下方式获得:

select * from `operations`
where (`finished` != 1 or `closed` != 1) and `finished` != `closed`

结果表是:

finished  closed  result
--------  ------  ------
       0       0    F
       0       1    T
       1       0    T
       1       1    F

您的原始查询使用了and,它应该使用or(假设您想要上面的第一个结果)。这只选择两个值都不是1的行

finished  closed  result
--------  ------  ------
       0       0    T
       0       1    F
       1       0    F
       1       1    F

答案 2 :(得分:1)

您必须使用SQL OR运算符:

SELECT * FROM `operations` WHERE `finished` != 1 OR `closed` != 1