2016-05-16 33 views
-1
1. select count(*) from tableX where code = "XYZ"; 
2. select count(*) from tableX where code like "%XYZ"; 

結果查詢1是18734. < ==不正確MySQL之間的不同計數 「其中=」 和 「其中相同的」

結果查詢2是93003. < ==正確

我們知道,基於獨立驗證,查詢2的計數是正確的。

我們預計這兩個查詢到爲每個完全相同的數量,因爲我們知道,在沒有TableX的行必須以「XYZ」結束的代碼,所以在一開始的通配符不應該影響查詢。

爲什麼這些查詢會產生不同的計數?

我們已經研究了「=」比較「喜歡」的字符串比較之間的差異,但基於我們的所有驗證檢查,我們還是不明白爲什麼這會帶給我們不同的計數

我們已確認以下內容:

我們使用的MySQL版本5.5.40-0ubuntu0.12.04.1。

+2

爲什麼你不加入2個結果集並檢查額外的行? – Fabricator

+0

你怎麼知道查詢2的結果是正確的* tableX中的行沒有以「XYZ」結尾的代碼* –

+0

第一個將無法捕獲所有'code ='blahXYZ'',第二個漁獲。這就是'%'所做的。 – Laurel

回答

0

比較之前修剪我們重新啓動數據庫駐留在,我們重新運行查詢,而現在他們都產生預期,正確的結果...

我們的服務器必須研究爲什麼這個「固定」問題的可能性。

0

爲了試試這個,讓您的答案:

SELECT code 
FROM tableX 
WHERE code LIKE "%XYZ" 
AND code <> "XYZ" 
LIMIT 10 

我的猜測是,你的一些代碼的結束與一個小寫的xyz,而且因爲LIKE是不區分大小寫的,它匹配這些地方=沒有。

+0

我同意查詢是一個很好的開始,但是在MySQL'='的許多配置中也是大小寫不敏感的。 – Uueerdo

+0

所有的代碼都是相同的情況,所以不區分大小寫不是問題。 –

0

where code = "XYZ";給出完全匹配,而where code LIKE "%XYZ";也包括部分匹配。在你的情況下,可能會有一個額外的空間存在,這是錯誤的計數。考慮像

where UPPER(TRIM(code)) = 'XYZ'; 
相關問題