You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两表列值并统计唯一姓名?SQL表连接问题咨询

跨表合并与全姓名统计解决方案

问题根源

你之前用Name字段做普通JOIN(内连接)时,只会返回两张表中Name匹配的记录,仅存在于Table B的Jack会被过滤,导致遗漏。要包含所有姓名,需用全外连接或联合查询+去重的方式。


方案1:全外连接合并列并保留所有姓名

适用于支持FULL OUTER JOIN的数据库(如PostgreSQL、SQL Server):

SELECT
    COALESCE(a.Name, b.Name) AS Name,
    -- 按需列出两表需要合并的列
    a.ColumnA_1,
    a.ColumnA_2,
    b.ColumnB_1,
    b.ColumnB_2
FROM TableA a
FULL OUTER JOIN TableB b 
    ON a.Name = b.Name;
  • COALESCE(a.Name, b.Name):优先取Table A的Name,若为空则取Table B的Name,确保所有姓名都被保留。

方案2:兼容无全外连接的数据库(如MySQL)

先通过UNION获取所有唯一姓名,再左连接两表获取对应列:

WITH AllUniqueNames AS (
    SELECT Name FROM TableA
    UNION  -- 自动去重,避免重复姓名
    SELECT Name FROM TableB
)
SELECT
    an.Name,
    a.ColumnA_1,
    a.ColumnA_2,
    b.ColumnB_1,
    b.ColumnB_2
FROM AllUniqueNames an
LEFT JOIN TableA a 
    ON an.Name = a.Name
LEFT JOIN TableB b 
    ON an.Name = b.Name;

统计唯一姓名数量(目标结果:4)

直接通过UNION合并两表姓名后统计:

SELECT COUNT(DISTINCT Name) AS UniqueNameCount
FROM (
    SELECT Name FROM TableA
    UNION
    SELECT Name FROM TableB
) AS CombinedNames;
  • UNION会自动去除重复姓名,外层COUNT(DISTINCT)确保统计的是唯一值数量,最终返回4(对应Mike、Abe、Diane、Jack)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:40:19