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

SQL如何合并仅存在空值差异的查询结果且不丢失有效数据

空值差异记录合并SQL实现方案

核心逻辑是先以姓名(FirstName+LastName)为唯一分组标识,分别提取每个分组下所有非空、去重的各字段值,再通过分组标识关联,即可得到无空值冗余、不丢失有效多值的合并结果。

示例实现代码如下:

WITH base_groups AS (
    -- 提取所有需要保留的基础分组
    SELECT DISTINCT FirstName, LastName FROM your_table
),
distinct_emails AS (
    -- 提取每个分组下非空去重的邮箱值
    SELECT 
        FirstName,
        LastName,
        Email
    FROM your_table
    WHERE Email IS NOT NULL AND TRIM(Email) != ''
    GROUP BY FirstName, LastName, Email
),
distinct_phones AS (
    -- 提取每个分组下非空去重的手机号值
    SELECT 
        FirstName,
        LastName,
        Phone
    FROM your_table
    WHERE Phone IS NOT NULL AND TRIM(Phone) != ''
    GROUP BY FirstName, LastName, Phone
)
SELECT 
    b.FirstName,
    b.LastName,
    e.Email,
    p.Phone
FROM base_groups b
LEFT JOIN distinct_emails e 
    ON b.FirstName = e.FirstName AND b.LastName = e.LastName
LEFT JOIN distinct_phones p 
    ON b.FirstName = p.FirstName AND b.LastName = p.LastName
ORDER BY b.FirstName, b.LastName;

逻辑说明

  • 单个分组下某字段只有一个非空有效值时,会自动补全到其他字段的所有多值行中,符合Bob、Mary的合并需求
  • 单个分组下某字段有多个不同非空有效值时,会保留全部有效值生成对应行数,符合Taylor保留两条不同手机号记录的需求
  • 自动过滤所有仅空值差异的冗余记录,不会出现DISTINCT查询带出的空值行
  • 如果需要合并的字段更多,只需按照相同逻辑新增对应字段的去重CTE,关联到基础分组表即可
  • 可根据数据库特性调整空值判断逻辑,比如部分场景不需要判断空字符串,仅保留IS NOT NULL条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03