2012-03-17 6 views
2
SELECT current_raised,segment FROM gizmos 
where created_at >= "2012-03-01" 

수익률 600 행MySQL의 UNION은 데이터 세트

SELECT "current_raised","segment" 
UNION 
(SELECT current_raised,segment FROM gizmos 
where created_at >= "2012-03-01") 

수익률 180 행

왜 이런 일이 반환 절단?

답변

6

union 중복 된 모든 결과 집합에서 제거됩니다 current_raised, segment 쌍. 대신 union all을 사용해보십시오.

여기에 무엇이 발생했는지에 대한 example이 줄었습니다.

+0

@MM - 감사합니다. 나는 그 차이점을 우연히 발견했다. 그러나 대답에 감사한다. 그리고 SQLFIDDLE을 가리켜 주셔서 고마워요. - 그 SH! T는 달콤합니다. – cgmckeever

+0

예, 멋지네요. :) 환영합니다! –

-1

그것은 표준 SQL의 약간 혼란 기능입니다 : SELECT의 기본 규정은 SELECT ALL하지만 UNION의 기본 규정이 UNION DISTINCT입니다.

첫 번째 쿼리는 암시 적으로 SELECT ALL을 사용하며 결과에 중복 행을 반환하며 좋지 않습니다. 명시 적으로 SELECT DISTINCT을 사용하여 첫 번째 쿼리를 수정하십시오.