2013-03-22 64 views
0

我有一個包含其UNION'ed在一起的兩個SELECT語句的SQL查詢。當單獨運行他們的第一個SELECT返回10個記錄,第二個SELECT返回1分的記錄,所以當我得到UNION 11個返回記錄兩個的SELECT我會希望,但這是不是這樣的,我只得到9條。聯盟的聲明顯示不一致的結果

由於SQL的本質,我不能在這裏發佈它,但它包含5個表中的大量JOINS。所有返回的內容都是正確和有效的。

只是想知道是否有人看到這個問題發生時,UNION的兩個SELECT語句,如果任何人有什麼可能的原因,甚至指向我在正確的方向的意見,謝謝。

+4

你不應該期待正好11條記錄。 UNION會將重複項「合併」爲一行,因此您應該期待MAX 11記錄。如果你得到9,這可能意味着它們在前10條記錄中是重複的......你可以嘗試使用UNION ALL嗎?並且/或者在您的第一個查詢中嘗試使用DISTINCT,查看您獲得的行數。 – 2013-03-22 10:28:30

+0

我們不能幫你,如果你不張貼代碼。 'UNION'不應該這麼做,所以代碼對於確定問題是至關重要的。我會建議創建一個[SQLFiddle](http://sqlfiddle.com),其中包含顯示問題的代碼 - 它不一定是您的確切代碼 - 只是表現出相同行爲的代碼。 – 2013-03-22 10:28:33

+0

@RaphaëlAlthaus感謝的是,完美的作品,現在,不知道有關的所有選項。 :) – llanato 2013-03-22 10:36:50

回答

3

UNION默認刪除重複項。爲了防止重複被去除UNION ALL應該被使用。

引用文檔:

工會的默認行爲是重複的行從結果中刪除。可選的DISTINCT關鍵字除缺省值外沒有其他作用,因爲它還指定刪除重複行。使用可選的ALL關鍵字,不會發生重複行刪除,結果包括所有SELECT語句中的所有匹配行。

0

默認情況下,Oracle會應用一個隱含的不同子句聯合的結果。您可能想要檢查單獨查詢的結果是否包含常用項目。

如果您不想要這種行爲,則需要改爲使用UNION ALL子句。

0

嘗試使用UNION ALL而不是僅使用UNION。 UNION只返回不同的行。 Check this out