【Oracle】很奇怪的 UNION

這幾天處理一個 case, SQL 的語法大致是將 2 個分公司的 database 結果給 union 起來, 但是怎麼合, 數字就是合不攏, 怪的是, 2 個 SELECT 敍述分開跑都正確, 一旦 UNION 起來數字就是不對.

後來長官來關切......因為進度嚴重 delay... :~(

"你要不要試試在 UNION 後加上 ALL?" 長官說.

果然, 加上 ALL 後, 數字就正確了.

"之前我也遇過這種情形, 加上 ALL 就解決了" 幸好長官有來關切, 不然踹死也不知問題出在哪裡.

上網爬了文, 一時找不到 Oracle 的 SQL 說明, 參考 Postgres 的, 它說道: "UNION 會將 2 個 SELECT 的結果合起來, 但不會含入重覆的記錄, 若要完整的 2 個 SELECT 結果結合, 就要使用 UNION ALL". 這下對 UNION 的用法有進一步的瞭解了.

BBB...But!! 到目前為止, 我的第 2 個 SELECT 是一筆記錄也沒有的啊......也就是說, 目前的跑出來的數字完全是第一個 SELECT 的結果, 可是 2 個 SELECT 分開跑跟 UNION 所得到的數字硬是不一樣, 只能說怪...

個人的猜測是, 當 UNION 後, 即使其中一個 SELECT 結果並無記錄, 但 Oracle 仍會當這是合併了 2 個 SELECT 後的結果, 所以若不是 UNION ALL, Oracle 會再剔掉重覆的資料列.