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

リターンを切り捨て行MySQLのUNION 600以上返されたデータセットに

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を使用して、最初のクエリを修正します。

関連する問題