所以我有一个包含2个字段的MySQL表 - deviceID和jobID。下面是表格中包含数据的示例:
+----------------------+----------------------+
| deviceID | jobID |
+----------------------+----------------------+
| f18204efba03a874bb9f | be83dec5d120c42a6b94 |
| 49ed54279fb983317051 | be83dec5d120c42a6b94 |
+----------------------+----------------------+
通常我会运行一个看起来像这样的查询:
SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID=%s AND deviceID=%s
现在运行正常,如果设备不存在指定的作业,通常会返回0,如果设备不存在则通常返回0 - 这非常好。然而,出于某种原因 - 我在第二排遇到问题。查询:
SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94' AND deviceID='49ed54279fb983317051'
由于某种原因返回0 - 即使数据存在于table3中并且计数应该返回为1,它也会返回0 ...任何想法为什么会这样?
先谢谢
编辑: 对不起类型的人!示例SQL查询不应该具有相同的devID和jobID ..我的错误
编辑2: 有些人建议我使用SQL LIKE运算符....是否需要这个?再次,当我运行以下查询时,一切运行正常并返回1.它似乎只在deviceID" 49ed54279fb983317051"那是在返回错误......
SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94' AND deviceID='f18204efba03a874bb9f'
上述查询按预期工作返回1
答案 0 :(得分:1)
您需要为jobID提供正确的值。目前,您在jobID中提供了deviceID的值,该值不匹配,因此返回0行。
SELECT Count(deviceID) FROM pendingCollect
WHERE jobID='49ed54279fb983317051' AND deviceID='49ed54279fb983317051'
^^^^^^^^^^^^^^^^^^^^^^^
原因
jobID=%s and deviceID=%s
我认为你的意思
jobID like '%s' and deviceID like '%s'
正在运作,因为两者都匹配。但是现在因为你正在使用AND条件并为两者提供相同的jobID值所以它不匹配任何行。并将返回0行。
修改强>
您的查询似乎是正确的,并给出了正确的结果。
<强> SQL FIDDLE DEMO 强>
您需要检查是否有任何空间被添加到jobID和deviceID列的值中。
答案 1 :(得分:0)
这是因为AND
运算符。 AND
表示两个条件都必须为真。而不是AND
,请使用OR
运算符。
SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID = '49ed54279fb983317051' OR deviceID = '49ed54279fb983317051'
答案 2 :(得分:0)
检查列包含的实际值,其中可能包含一些不可打印的字符:
SELECT deviceID, hex(deviceID), hex('49ed54279fb983317051')
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94';
如果deviceID中有任何奇怪的东西,它应该显示为十六进制输出的差异 - 对于你想要的值,我没有将它添加到where条件,因为你有“目标”它的问题,所以这个查询即使对于具有相同jobID的其他设备,也会返回行。