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

如何使用SQL从directors表中获取基于name和phone_number的重复行

解决重复行查询问题

你的原SQL逻辑有误:uuid是表的唯一标识,按uuid分组后每组仅包含一行数据,count(d2.phone_number)和count(d2.name)永远等于1,根本无法筛选出重复行。

以下是几种正确的实现方式:

方法1:窗口函数(推荐,支持MySQL 8+、PostgreSQL、SQL Server等)

通过窗口函数计算每个name和phone_number的出现次数,直接筛选出次数大于1的行:

SELECT uuid, name, phone_number
FROM (
    SELECT 
        uuid, 
        name, 
        phone_number,
        COUNT(*) OVER (PARTITION BY name) AS name_count,
        COUNT(*) OVER (PARTITION BY phone_number) AS phone_count
    FROM directors
) t
WHERE name_count > 1 OR phone_count > 1;

方法2:EXISTS子查询

判断当前行的name或phone_number在其他行存在重复:

SELECT d1.*
FROM directors d1
WHERE EXISTS (
    SELECT 1 
    FROM directors d2 
    WHERE d2.uuid != d1.uuid 
      AND (d2.name = d1.name OR d2.phone_number = d1.phone_number)
);

方法3:先收集重复值再关联

先找出所有重复的name和phone_number,再关联原表获取对应行:

SELECT d.*
FROM directors d
JOIN (
    -- 提取重复的name
    SELECT name FROM directors GROUP BY name HAVING COUNT(*) > 1
    UNION
    -- 提取重复的phone_number
    SELECT phone_number FROM directors GROUP BY phone_number HAVING COUNT(*) > 1
) dup ON d.name = dup.name OR d.phone_number = dup.phone_number;

以上三种方法都能正确返回你需要的结果:包含phone_number重复的前两行,以及name重复的第一行和最后一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:25:21