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

SQLite删除重复数据后,如何将新数据保存为新表?

在SQLite中删除重复项并保存为新表的解决方案

我需要从包含10000行数据的Table1中删除重复项,删除后将新表命名为newtable1。已经完成重复数据删除,但不清楚如何保存新表,想了解第三段代码(第三个分号后)需添加的语句。


原表Table1数据片段

IDDATE1TIME
122021-07-082:00:34
112020-08-039:19:39
332020-07-0410:18:00
332020-07-0410:18:00

删除重复项后的目标表newtable1

IDDATE1TIME
122021-07-082:00:34
112020-08-039:19:39
332020-07-0410:18:00

现有代码的问题说明

  1. 第一段CREATE TABLE table1 AS SELECT * FROM table1会报错,SQLite不允许直接创建与现有表同名的新表。
  2. 删除重复项的语句中,from table是笔误,应为from table1。
  3. 你最后用ALTER TABLE table1 RENAME TO newtable1的思路可行,但需要先修正删除语句的逻辑,确保只删除真正的重复项。

方案一:直接创建去重后的新表(推荐)

无需先修改原表,直接通过查询生成无重复的新表,更安全:

-- 直接生成去重后的newtable1,保留每组重复数据中rowid最小的行
CREATE TABLE newtable1 AS
SELECT *
FROM table1
WHERE DATE1 >= '2020-07-01'
AND rowid IN (
    SELECT MIN(rowid)
    FROM table1
    WHERE DATE1 >= '2020-07-01'
    GROUP BY ID, DATE1, TIME -- 按所有需判断重复的字段分组
);
  • GROUP BY ID, DATE1, TIME:确保只有三个字段完全相同的数据才被判定为重复项。
  • MIN(rowid):保留每组重复数据中最早插入的行,若需保留最晚插入的行,可改为MAX(rowid)。

方案二:删除原表重复项后重命名(修正你的原有思路)

如果你坚持先处理原表再重命名,需先修正删除逻辑:

-- 第一步:备份原表(新手强烈推荐,防止误操作)
CREATE TABLE table1_backup AS SELECT * FROM table1;

-- 第二步:删除table1中的重复项
DELETE FROM table1
WHERE DATE1 >= '2020-07-01'
AND rowid NOT IN (
    SELECT MIN(rowid)
    FROM table1
    WHERE DATE1 >= '2020-07-01'
    GROUP BY ID, DATE1, TIME
);

-- 第三步:将处理后的表重命名为newtable1
ALTER TABLE table1 RENAME TO newtable1;

验证去重结果

执行完成后,可通过以下语句确认重复项已删除:

SELECT ID, DATE1, TIME, COUNT(*) AS count
FROM newtable1
GROUP BY ID, DATE1, TIME
HAVING COUNT(*) > 1;

若查询结果为空,说明重复项已完全清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:48:19