将多个 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 示例如下:
- contentid, value
- 16、200
- 18, 150
- 47, 120
- 16、110
预期结果应为 18, 150
和 16, 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;
我在编写具有多个 OR 运算符后跟 AND 运算符的查询时遇到了一些困难。
目前,我的查询如下所示:
SELECT * FROM `contentvalues` WHERE (`contentid` = 16 OR `contentid` = 18) AND `value` <= 180;
但是,生成的结果似乎表明 AND 运算符:
AND `value` <= 180;
正在被忽略。
有人知道我做错了什么吗?
--更多信息--
我正在查询的 table 示例如下:
- contentid, value
- 16、200
- 18, 150
- 47, 120
- 16、110
预期结果应为 18, 150
和 16, 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;