在我的表中,我有两列:已完成和已关闭。我想要一个选择,显示所有没有BOTH值为1的项目。这是我正在尝试但它不会显示其中一个在1而另一个在0的项目:
select * from `operations` where (`finished` != 1 and `closed` != 1)
答案 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
将值简化为1
或0
,您会看到:
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