| 特性 | UNION | UNION ALL |
|---|---|---|
| 重複列 | 移除 (DISTINCT) | 保留所有 |
| 效能 | 需排序/雜湊去重,較慢 | 單純串流,極快 |
| 語意 | 數學聯集 | 多重集聯集 |
-- 銷售與採購的供應商產品清單 (去重)
SELECT prod_id, sup_id FROM sale_item WHERE order_no=10001
UNION
SELECT prod_id, sup_id FROM purchase WHERE pur_no=50001
ORDER BY 1,2;
-- 保留重複 (如需統計出現次數)
SELECT prod_id, sup_id FROM sale_item WHERE order_no=10001
UNION ALL
SELECT prod_id, sup_id FROM purchase WHERE pur_no=50001
ORDER BY 1,2;
Access SQL 不支援 CASE,僅有 IIF。複雜條件可拆分為互斥查詢再 UNION ALL:
-- 原邏輯:若 b.bdl>0 則 a.ydl+b.rmpwr-b.bdl ELSE a.yd-b.yd
-- 拆分為兩個互斥查詢
SELECT a.ydl + b.rmpwr - b.bdl AS yd
FROM a, b WHERE a.mid=b.mid AND b.bdl > 0
UNION ALL
SELECT a.yd - b.yd
FROM a, b WHERE a.mid=b.mid AND ISNULL(b.bdl,-1) <= 0;
UNION ALL 正確且高效UNION 去重ORDER BY 僅能放在最後一個查詢之後,排序欄位用序數 (1,2) 或第一個查詢別名UNION/UNION ALL 是集合運算基石,理解「去重代價」與「互斥條件拆分」技巧,能在舊版 Access、跨平台遷移、複雜報表邏輯中遊刃有餘。