2012-12-18 12 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

시험 예제처럼 작동하는 데이터 집합을 사용하여 하위 쿼리를 실행 해 봅니다. 필자는 그 방향으로 colation 또는 someting에 문제가 있다고 생각합니다. 그것의 외관에서 하위 쿼리의 순서가 당신의 기대에 작동하지 않습니다. – Jester

+0

예, 시도했습니다. 하위 쿼리는 자체적으로 실행하면 정상적으로 작동합니다. 세 데이터베이스 모두에서 테이블의 데이터 정렬 및 저장 엔진이 일치합니다. 도움이된다면, mysqldump가 그들을 내보내기 위해 사용되었고, 생성 된 스크립트를 통해로드되었다. – dalto

+0

UserID 5가 모든 데이터베이스에서 동일한 레코드를 가리키고 있습니까? – Limey

답변

0

필드의 데이터 유형이 부동 상태입니까? float 비교에서 이상한 일이 발생할 수 있습니다.