将多个OR运算符与AND运算符组合在一起

时间:2015-12-28 07:24:41

标签: sql mysqli operators

我在编写一个有多个OR运算符后跟AND运算符的查询时遇到了一些困难。

目前,我的查询如下:

SELECT * FROM `contentvalues` WHERE (`contentid` = 16 OR `contentid` = 18) AND `value` <= 180;

但是,产生的结果似乎表明AND运算符:

AND `value` <= 180;

被忽略了。

有人知道我做错了吗?

- 更多信息 -

我查询的表格示例如下:

  • 有争议
  • 16,200
  • 18,150
  • 47,120
  • 16,110

预期结果应为18, 15016, 110,但16, 200也包括在内,即使200大于180

修改

对不起,上面的问题是错的 - 我试图删除但不能,因为它已经有问题了。

问题不在于查询,而是values列中的某些值是字符串。无论查询中的数字是什么,这些都显示出来。

3 个答案:

答案 0 :(得分:1)

您将同一变量的or逻辑放在SQL in 子句中。

试试这个

SELECT * FROM `contentvalues` WHERE contentid in (16,18) AND value <= 180;

答案 1 :(得分:0)

你得到的结果是正确的。我猜你对你的查询实际执行方式感到困惑。所以你的查询是:

SELECT * FROM `contentvalues` WHERE (`contentid` = 16 OR `contentid` = 18) AND `value` <= 180;

就像拿

一样
`contentid` = 16 AND `value` <= 180   //gives 16, 110

UNION

OR `contentid` = 18 AND `value` <= 180   //gives 18, 150

所以预期结果是正确的。

  

但也包括16,200,即使200大于180。

它不会被忽略,只是它没有满足where子句条件。

答案 2 :(得分:0)

如果列中的值是字符串,则可以使用
SELECT * FROM contentvalues WHERE contentid in(16,18)AND CONVERT(值,SIGNED INTEGER)&lt; = 180;