我在编写一个有多个OR运算符后跟AND运算符的查询时遇到了一些困难。
目前,我的查询如下:
SELECT * FROM `contentvalues` WHERE (`contentid` = 16 OR `contentid` = 18) AND `value` <= 180;
但是,产生的结果似乎表明AND运算符:
AND `value` <= 180;
被忽略了。
有人知道我做错了吗?
- 更多信息 -
我查询的表格示例如下:
预期结果应为18, 150
和16, 110
,但16, 200
也包括在内,即使200
大于180
。
修改
对不起,上面的问题是错的 - 我试图删除但不能,因为它已经有问题了。
问题不在于查询,而是values
列中的某些值是字符串。无论查询中的数字是什么,这些都显示出来。
答案 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;