对于存在的列,Count返回0

时间:2015-09-25 06:50:58

标签: mysql sql

所以我有一个包含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

3 个答案:

答案 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的其他设备,也会返回行。