2014-09-03 66 views
0

我试图运行该SQL查询没有返回行:查询在MySQL

SELECT * 
FROM `tickets_extra_emails` 
WHERE ticketnumber = '50909' 
    AND email_address = '[email protected]' 

但它说,但没有行返回,当我浏览表存在与上述值多行

+1

如果查询返回零行,则有零个匹配的行。也许有一些空白处扔掉东西。如果可能,请尝试创建一个脚本,该脚本将填充虚拟数据并在此处发布该脚本,显示无法针对该虚拟数据返回行的查询。 – cdhowie 2014-09-03 23:13:16

+0

'ticketnumber'字段的数据类型是什么?这真的是一种字符类型而不是数字吗? – Guffa 2014-09-03 23:14:20

+0

ticketnumber = varchar(20) – user3843997 2014-09-03 23:19:11

回答

0

你查询是正确的,没有结果意味着您没有包含这些值的行。使用VARCHAR值时要小心,因为放置在值的开始处的空格会使结果不相等(最后的空格不会影响相等的操作,但如果是LIKE子句,则会考虑开始和结束空格)!

尝试此查询:

SELECT * 
FROM `tickets_extra_emails` T 
WHERE TRIM(T.ticketnumber) = '50909' 
    AND TRIM(T.email_address) = '[email protected]' 

与您查询的版本唯一的区别是使用TRIM()功能。该功能将删除所有位于值的开始/结尾处的空间,并可能解决您的问题。

在你仍然没有结果的情况下,向我们提供一个数据样本,因为你的问题确实是你在表格中的值,而不是你在这里使用的查询。

希望这会有所帮助。

+1

varchar值末尾的尾随空格[在相等性测试期间未考虑](http://sqlfiddle.com/#!2/bcf622/2),但在'LIKE'测试期间考虑*。只是想澄清这一点,因为你声称放置在最后的空间也会导致问题;开始时只有空格。 – cdhowie 2014-09-04 15:35:45

+0

@cdhowie谢谢你的澄清,我已经完成了我的回答,包括你的反馈意见 – 2014-09-04 20:04:39