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

如何使用SQLite查询同名字段的重复行并展示对应完整数据?

SQLite查询姓名重复人员记录方案

你可以通过以下两种常用方式实现需求,两种方法均能返回所有姓名相同、但person_no不同的完整人员行:

写法1:子查询+IN筛选(兼容所有SQLite版本)

-- 请将代码中的person_info替换为你实际的表名
SELECT person_no, name, birthday
FROM person_info
WHERE name IN (
    SELECT name
    FROM person_info
    GROUP BY name
    HAVING COUNT(DISTINCT person_no) > 1
)
ORDER BY name, person_no;

逻辑说明:内层子查询先按姓名分组,筛选出对应超过1个唯一person_no的姓名,外层查询直接拉取这些姓名对应的所有完整记录,写法简单易理解,适合入门使用。

写法2:窗口函数(适用于SQLite 3.25及以上版本)

-- 请将代码中的person_info替换为你实际的表名
WITH person_stat AS (
    SELECT *,
           COUNT(DISTINCT person_no) OVER (PARTITION BY name) AS name_people_cnt
    FROM person_info
)
SELECT person_no, name, birthday
FROM person_stat
WHERE name_people_cnt > 1
ORDER BY name, person_no;

逻辑说明:用CTE加窗口函数的方式,按姓名分区统计每个姓名对应的人员数量,直接过滤出数量大于1的记录即可,后续如果需要在结果中同步展示重复次数,拓展更方便。

针对你给出的样例表,两种写法的运行结果一致:

person_nonamebirthday
01John01/01/2000
02John15/03/2000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:36:03