2014-04-16 3 views
0

의 다른 수를 반환 Showing rows 0 - 24 (435 total, Query took 0.0110 sec)왜 UNION SELECT 행

내가 LIMIT 5와 그 쿼리를 실행해야을, 그래서 나는에있다 하지만 브래킷과 한도, 바로 그 쿼리 각 select 주변이 경우 괄호를 사용

(SELECT 1, `name` FROM `table1` WHERE `reg` = 3 AND `lang` = 5 LIMIT 5) 
UNION 
(SELECT 2, `name` FROM `table1` WHERE `reg` = 1 AND `lang` = 2 LIMIT 5) 
UNION 
(SELECT 3, `name` FROM `table1` WHERE `reg` = 6 AND `lang` = 10 LIMIT 5) 

하면 다음과 반환 : Showing rows 0 - 24 (17098 total, 0 in query, Query took 0.0020 sec)

내가 잘못하고있는 것이 있습니까?

+0

다른 테이블이 있습니까? – vaultah

+0

두 개의 노동 조합은 동일하지 않습니다. 두 번째 것은 개별 선택에서'LIMIT'을 사용합니다. 'UNION'은 중복을 제거합니다 - 대신에'UNION ALL'을 사용하면 어떻게됩니까 –

+0

아니요,이 타입은 방금 편집했습니다. – qwaz

답변

1

두 번째 질문은 당신이 LIMIT 5

편집을 사용하는 두 번째 쿼리 이후 첫 번째로 다르다 : -

는이 작업을 시도 할 수 있습니다 :

(SELECT 1 as sort_col, `name` FROM `table1` WHERE `reg` = 3 AND `lang` = 5 LIMIT 5) 
UNION 
(SELECT 2, `name` FROM `table1` WHERE `reg` = 1 AND `lang` = 2 LIMIT 5) 
UNION 
(SELECT 3, `name` FROM `table1` WHERE `reg` = 6 AND `lang` = 10 LIMIT 5) 
ORDER BY sort_col, `name` 

MYSQL Docs :

ORDER BY 또는 LIMIT 절을 사용하여 전체 UNION 결과를 정렬하거나 제한하려면 개별 SELECT 문을 괄호로 묶고 마지막 단락 뒤에 ORDER BY 또는 LIMIT을 배치하십시오. 괄호를 사용

+0

아니요,이 내 유형, 지금 편집. 죄송합니다. – qwaz

+0

두 번째 쿼리에서 LIMIT 5를 사용하는 이유는 다른 출력을 얻는 이유입니다. 내 대답이 업데이트되었습니다! –

+0

'limit 5 '가없는 두 번째 쿼리를 실행할 때 괄호 만 사용하면 결과가 변경되지 않습니다.'행 0 - 49 (17098 총계, 쿼리 0, 쿼리 0.0130 초)' – qwaz

0

모두 쿼리에 사용 Explain YOUR_QUERY을 조사하기 위해 각각의 서브 쿼리

의 쿼리 할당 우선 순위의 처리를 변경합니다.

+0

두 쿼리에 대한 설명은 절대적으로 나타납니다 같은 – qwaz

+0

각 쿼리에서'order by id'로 확인할 수 있습니까? 이유는 UNION이 un-ordered result set을 생성합니다. [mysql doc] (http://dev.mysql.com/doc/refman/5.0/en/union.html) – Suketu