2014-09-03 67 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