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

查询关联不同UserId的重复Email问题求助

解决关联不同UserId的重复Email查询问题

你的问题出在原查询用count(*) over (partition by cd.email)统计的是该Email对应的所有记录数,而非关联的不同UserId数量。所以如果同一个用户(比如UserId=123)多次关联同一个Email,这条Email的cnt也会大于1,导致被错误筛选出来。

修正后的查询方案

可以改用count(distinct u.UserId) over (partition by cd.email)来统计每个Email关联的不同用户数,这样只有当不同用户数>1时,才会被保留:

select UserId, acitveid, email, userstatusid
from (
    select  
        u.UserId, 
        u.acitveid, 
        cd.email, 
        u.userstatusid,
        -- 统计每个Email关联的不同UserId数量
        count(distinct u.UserId) over (partition by cd.email) as distinct_user_cnt
    from ContactDetails cd 
    join UserContactDetails ucd on ucd.ContactDetailsId = cd.ContactDetailsId
    join dbo.[User] u on u.UserId = ucd.UserId 
) ua
where distinct_user_cnt > 1

另一种思路(先筛选目标Email再关联)

如果你觉得窗口函数里用distinct性能不太好,也可以先找出存在多个不同UserId的Email列表,再关联回原表获取详情:

select 
    u.UserId, 
    u.acitveid, 
    cd.email, 
    u.userstatusid
from ContactDetails cd 
join UserContactDetails ucd on ucd.ContactDetailsId = cd.ContactDetailsId
join dbo.[User] u on u.UserId = ucd.UserId
where cd.email in (
    select cd_inner.email
    from ContactDetails cd_inner
    join UserContactDetails ucd_inner on ucd_inner.ContactDetailsId = cd_inner.ContactDetailsId
    group by cd_inner.email
    having count(distinct ucd_inner.UserId) > 1
)

这两种方案都能过滤掉同一用户重复关联的Email,只保留那些被不同UserId关联的重复Email记录,符合你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:21