表 n 有列 a、b,需縱向合併為單列 c:
a b → c
1 4 1
2 5 2
3 6 3
4
5
6
-- 保留重複值
SELECT a AS c FROM n
UNION ALL
SELECT b AS c FROM n;
-- 去重(題目樣例無重複,結果相同)
SELECT a AS c FROM n
UNION
SELECT b AS c FROM n;
| 操作符 | 去重 | 性能 | 適用場景 |
|---|---|---|---|
| UNION | 是 (排序/哈希去重) | 較慢 | 業務要求唯一值 |
| UNION ALL | 否 | 快 (單純拼接) | 允許重複/明知無重複 |
-- Oracle 11g+ 支援 UNPIVOT
SELECT c FROM n
UNPIVOT (c FOR src IN (a, b));
優勢:僅掃描一次表,適合大數據量。
UNION ALL / UNPIVOT。UNION ALL;8.0+ 支援 LATERAL JOIN 模擬 UNPIVOT。UNION ALL / UNNEST(ARRAY[a,b])。