首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 將兩列合併為一列:UNION ALL vs UNION 去重

     編輯:程式設計綜合問答

需求

表 n 有列 a、b,需縱向合併為單列 c:

a  b     →     c
1  4          1
2  5          2
3  6          3
             4
             5
             6

標準 SQL

-- 保留重複值
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 vs UNION ALL

操作符去重性能適用場景
UNION是 (排序/哈希去重)較慢業務要求唯一值
UNION ALL否快 (單純拼接)允許重複/明知無重複

進階:單次掃描 (UNPIVOT)

-- Oracle 11g+ 支援 UNPIVOT
SELECT c FROM n
UNPIVOT (c FOR src IN (a, b));

優勢:僅掃描一次表,適合大數據量。

其他數據庫寫法

  • SQL Server:同樣支援 UNION ALL / UNPIVOT。
  • MySQL:UNION ALL;8.0+ 支援 LATERAL JOIN 模擬 UNPIVOT。
  • PostgreSQL:UNION ALL / UNNEST(ARRAY[a,b])。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved