2012-12-18 136 views
3

好吧,我看到奇怪的查詢行爲從我的一個MySQL服務器。我在三臺不同的服務器上運行了以下兩個查詢,全部使用相同的數據。mysql奇怪的查詢行爲

SELECT t1.Field1, t1.Field2, t1.Field3, 
(SELECT t2.Field1 
    FROM thetable AS t2 
    WHERE Field2=t1.Field2 AND Field3=t1.Field3 AND t2.Field1>t1.Field1 
    ORDER BY Field1 
    LIMIT 1) AS MinimumResult 
FROM thetable AS t1 
WHERE t1.UserID=5; 

SELECT t1.Field1, t1.Field2, t1.Field3, 
(SELECT min(t2.Field1) 
    FROM thetable AS t2 
    WHERE Field2=t1.Field2 AND Field3=t1.Field3 AND t2.Field1>t1.Field1) AS MinimumResult 
FROM thetable AS t1 
WHERE t1.UserID=5; 

在三臺服務器中的兩臺上,兩個查詢都返回相同的結果。第三,我得到了MinimumResult字段的兩個不同的結果。第一個查詢返回一個小數字。第二個查詢返回我期望的和兩個查詢在其他服務器上返回的結果。

我不知道該如何迴應?這是服務器配置問題還是預期行爲?

在此先感謝您提供的任何幫助。

+0

嘗試使用dosent工作的數據集執行子查詢,就像一個測試示例我有一種感覺,這是一個朝着這個方向通用化或有些問題的問題。從它的外觀看,子查詢的順序不符合你的期望。 – Jester

+0

是的,我嘗試過。如果自行運行,子查詢可以正常工作。所有三個數據庫上的表的排序規則和存儲引擎都匹配。如果有幫助,使用mysqldump導出它們,並通過它創建的腳本加載它們。 – dalto

+0

您確定UserID 5指向所有數據庫中的相同記錄嗎? – Limey

回答

0

您的字段的數據類型是否爲float?在浮點比較中會發生一些奇怪的事情。