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

如何在Android SQLite中删除表内重复的name字段值

如何在SQLite中删除表中name字段的重复值

嘿,别担心,我来一步步给你讲清楚怎么搞定这个问题,咱们分两种场景来处理,你可以根据自己的SQLite版本选合适的方法:

方法一:用窗口函数(推荐,适用于SQLite 3.25.0及以上版本)

这个版本之后的SQLite支持窗口函数,写法更直观,咱们可以给每个name分组后的记录编个号,然后删掉编号大于1的重复项(这里默认保留每个name对应id最小的那条记录,要是想保留最大的,改排序字段就行)。

首先,你可以先运行下面的查询,看看哪些记录是要被删除的,确认没问题再执行删除:

SELECT id, name
FROM (
    SELECT 
        id,
        name,
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rn
    FROM your_table_name
) AS temp
WHERE rn > 1;

这里的PARTITION BY name是把相同name的记录归为一组,ORDER BY id让组内记录按id从小到大排序,rn就是组内的序号,序号大于1的就是重复的冗余记录。

确认要删除的记录没问题后,执行删除语句:

DELETE FROM your_table_name
WHERE id IN (
    SELECT id
    FROM (
        SELECT 
            id,
            name,
            ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rn
        FROM your_table_name
    ) AS temp
    WHERE rn > 1
);

注意:SQLite不允许在DELETE的WHERE子句直接引用正在修改的表,所以得套一层子查询,不然会报错哦。

方法二:兼容旧版本SQLite(无窗口函数)

如果你的SQLite版本比较老,不支持窗口函数,咱们用另一种方式:找出每个name对应的最小id(要保留的记录),然后删除其他同name的记录。

直接执行这条删除语句就行:

DELETE FROM your_table_name
WHERE id NOT IN (
    SELECT MIN(id)
    FROM your_table_name
    GROUP BY name
);

要是你想保留每个name对应id最大的那条,把MIN(id)改成MAX(id)就可以了。

重要提醒

  • 操作前一定要备份数据表!删除操作是不可逆的,万一写错了还能恢复数据。
  • 记得把语句里的your_table_name替换成你实际的表名哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:54:26