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

SQL中基于Email字段去除表重复行并获取无重复数据的技术问题

基于Email字段筛选无重复的完整记录

问题分析

你当前使用的SELECT DISTINCT Email FROM Users仅能返回去重后的Email值,无法获取完整的行记录,也无法排除那些Email重复出现的所有行(比如示例中sam@gmail.com出现两次,你的需求是完全排除这两行,只保留Email唯一的记录)。

解决方案

以下是两种常用的实现方式,可根据你的SQL方言(如MySQL、PostgreSQL、SQL Server等)选择合适的方法:

方法1:GROUP BY + HAVING 关联原表

先统计每个Email的出现次数,筛选出仅出现一次的Email,再关联原表获取完整记录:

SELECT u.*
FROM Users u
JOIN (
    SELECT Email
    FROM Users
    WHERE Email IS NOT NULL  -- 排除空值Email的情况,按需调整
    GROUP BY Email
    HAVING COUNT(*) = 1
) AS unique_emails ON u.Email = unique_emails.Email

方法2:窗口函数(适用于支持窗口函数的数据库)

使用COUNT() OVER()窗口函数标记每行Email的出现次数,筛选次数为1的行:

SELECT Id, Email, Username
FROM (
    SELECT 
        *,
        COUNT(*) OVER(PARTITION BY Email) AS email_count
    FROM Users
    WHERE Email IS NOT NULL
) AS temp
WHERE email_count = 1

说明

  • 语句中WHERE Email IS NOT NULL用于排除示例表中的空Email行,若业务允许保留空Email的唯一行,可移除该条件。
  • 示例表中sam@gmail.com出现两次,因此这两行都会被排除,最终结果与你期望的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:25:26