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

Combining multiple OR operators with an AND operator

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

目前,我的查询如下所示:

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

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

AND `value` <= 180;

正在被忽略。

有人知道我做错了什么吗?

--更多信息--

我正在查询的 table 示例如下:

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

编辑:

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

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

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

这样试试

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

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

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

这就像

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

联盟

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

所以预期的结果是正确的。

but 16, 200 is also being included, even though 200 is greater than 180.

没有忽略,只是不满足where子句条件

如果列中的值为字符串,那么您可以使用
SELECT * 从 contentvalues WHERE contentid in (16,18) AND 转换(值,有符号整数)<= 180;