2012-12-18 89 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?在浮点比较中会发生一些奇怪的事情。