You need to enable JavaScript to run this app. SQL Server SELECT UNION语句如何添加表来源标识列
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server SELECT UNION语句如何添加表来源标识列

直接新增来源列后UNION失效,是因为UNION会对查询返回的所有列做整体去重,你给A表行加'A'、B表行加'B'后,原本完全相同的业务行会因为来源列值不同,被判定为不同行,自然无法合并。以下是两种可行实现方案:


方案1:FULL OUTER JOIN 实现(支持全外连接的数据库通用,如MySQL 8.0+、PostgreSQL、Oracle等)

SELECT 
  COALESCE(a.Col1, b.Col1) AS Col1,
  COALESCE(a.Col2, b.Col2) AS Col2,
  COALESCE(a.Col3, b.Col3) AS Col3,
  CASE 
    WHEN a.Col1 IS NOT NULL AND b.Col1 IS NOT NULL THEN 'AB'
    WHEN a.Col1 IS NOT NULL THEN 'A'
    ELSE 'B'
  END AS Col4
FROM A
FULL OUTER JOIN B 
  ON A.Col1 = B.Col1 
  AND A.Col2 = B.Col2 
  AND A.Col3 = B.Col3;

逻辑:将两张表按所有业务列等值关联,全外连接会保留两张表的所有行,匹配成功的就是两表共有的行,仅单侧有值的就是单表独有行,通过CASE判断输出对应来源标识即可。


方案2:UNION ALL + 分组聚合(兼容性更强,无全外连接的数据库也可使用)

SELECT 
  Col1,
  Col2,
  Col3,
  CASE 
    WHEN COUNT(DISTINCT source) = 2 THEN 'AB'
    ELSE MAX(source) 
  END AS Col4
FROM (
  SELECT 'A' AS source, Col1, Col2, Col3 FROM A
  UNION ALL
  SELECT 'B' AS source, Col1, Col2, Col3 FROM B
) AS combined_data
GROUP BY Col1, Col2, Col3;

逻辑:先用UNION ALL保留两张表的所有行和对应来源标识,再按三个业务列分组,统计每个分组的来源数量:有两个不同来源的就是两表共有,标记为AB,剩下的只有一个来源,直接取对应来源值即可。


内容的提问来源于stack exchange,提问作者Conner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 13:09:03