Mysql 对于存在的列,Count返回0

Mysql 对于存在的列,Count返回0,mysql,sql,Mysql,Sql,所以我有一个MySQL表,它包含两个字段——deviceID和jobID。下面是表格中包含数据的示例: +----------------------+----------------------+ | deviceID | jobID | +----------------------+----------------------+ | f18204efba03a874bb9f | be83dec5d120c42a6b94 | | 49ed

所以我有一个MySQL表,它包含两个字段——deviceID和jobID。下面是表格中包含数据的示例:

+----------------------+----------------------+
|      deviceID        |        jobID         |
+----------------------+----------------------+
| f18204efba03a874bb9f | be83dec5d120c42a6b94 |
| 49ed54279fb983317051 | be83dec5d120c42a6b94 |
+----------------------+----------------------+
通常我运行的查询有点像这样:

SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID=%s AND deviceID=%s
现在运行正常,如果设备不存在指定的作业,则通常返回0,如果存在,则返回1,这很好。然而,由于某种原因,我在第二排有问题。查询:

SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94' AND deviceID='49ed54279fb983317051'
由于某种原因返回0-即使数据存在于表3中且计数应返回为1,但返回为0。。。你知道为什么吗

提前谢谢

编辑: 对不起,这类家伙!示例SQL查询不应具有相同的devID和jobID。。我的错误

编辑2: 有些人建议我使用SQL-LIKE操作符。。。。有必要这样做吗?同样,当我运行下面的查询时,一切运行正常并返回1。似乎只有在返回错误的设备ID“49ed54279fb983317051”上

SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94' AND deviceID='f18204efba03a874bb9f'

上述查询按预期工作,返回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行

编辑:

您的查询似乎是正确的,并且给出了正确的结果


您需要检查jobID和deviceID列的值中是否添加了空格。

这是由于
运算符造成的
表示这两个条件都必须为真。使用
运算符代替

SELECT Count(deviceID)
FROM pendingCollect
WHERE jobID = '49ed54279fb983317051' OR deviceID = '49ed54279fb983317051'

检查列包含的实际值,其中可能有一些无法打印的字符:

SELECT deviceID, hex(deviceID), hex('49ed54279fb983317051')
FROM pendingCollect
WHERE jobID='be83dec5d120c42a6b94';

如果deviceID中有任何奇怪的地方,它应该在十六进制输出中显示为差异-对于您想要的值,我没有将其添加到where条件中,因为您在“定位”它时遇到问题,因此,此查询将返回行,即使对于具有相同jobID的其他设备也是如此。

您的
jobID
与查询中的
device
id相同,我认为您没有更改编号您的意思是jobID和deviceid在查询中相同吗…?不,抱歉!检查OP中的编辑:)虽然我没有投反对票-我可以告诉你这不是解决方案-我在OP中输入了一个错误-jobID和devID将永远不会是same@amartin94:-这两列的数据类型是什么?@amartin94:-我已经更新了我的答案。YOU查询看起来不错,并按预期工作。您需要检查在插入jobID或deviceID的值时是否有任何空间被添加到这些值中。@amartin94:-检查
49ed54279fb983317051
value中是否有任何空间?DB字段tat中没有包含该设备的空间。。。。只插入字符串,没有间距