如何在sqlite中删除包含ID的每个列都是重复的重复行?

Beh*_*joo 5 sql sqlite

我正在使用sqlite.我正在导入一个数据集,其中ID被外部分配到临时表中,然后将其插入到我的永久表中.永久表使用外部标识(RunId)并且没有其他标识列.

我将表从csv导入到新表Book1中,其中C15是ID列.然后我运行插入:

INSERT INTO PrimusRuns (RunId, TransientName, RunDateStart, RunType, TestDateStart,
                    Gross, CPS, Shares, MaxExposure, PercentWin, Duration)
SELECT a.C15, a.C1, JULIANDAY(a.C2), a.C3,JULIANDAY(a.C4),
        a.C6, a.C8, a.C9, a.C10, a.C11, a.C14
FROM Book1 as a;
Run Code Online (Sandbox Code Playgroud)

但是我得到一个主键约束错误:

[19] [SQLITE_CONSTRAINT_PRIMARYKEY] A PRIMARY KEY constraint failed (UNIQUE constraint failed: PrimusRuns.RunID)
Run Code Online (Sandbox Code Playgroud)

首先,我认为其中一些行已经在表中但运行:

SELECT * FROM Book1 WHERE C15 IN(
  SELECT RunID from PrimusRuns
);
Run Code Online (Sandbox Code Playgroud)

没有回报.

然后我意识到在运行时导入中有重复的行:

SELECT * FROM Book1 GROUP BY C15 HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

此聚合查询返回95行,这意味着我必须删除至少95行.如何删除告诉它删除重复项?

注意:还有其他类似的问题,但我的问题不同,因为id也是重复的.其他问题将列的其余部分分组并删除max(id).但在我的情况下,max id返回的行不仅仅是一行.

sca*_*dge 1

对于仅在删除引用 C15 的重复行时相关的内容,您可以找到 C15 的所有 min(id) 组..因此这是每个 C15 值的单行\n并删除其他行,例如

\n\n
  delete from \n  book1\n  where id not in ( \n  select min(id)\n  from Book1\n  group by C15) \n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果您有完整的完全重复的行,您可以使用\xc3\xacin这些步骤..

\n\n

1)您可以创建一个具有不同结果的临时表以进行重复,例如:

\n\n
create table my_temp_distinct  as  \nselect col1, col2 ... \nfrom Book1\ngroup by col1, col2, ... \nhaving count(*)> 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

2)然后删除所有有重复行的行

\n\n
  delete from \n  book1\n  where id in ( \n  select min(id)\n  from Book1\n  group by C15) \n
Run Code Online (Sandbox Code Playgroud)\n\n

3)最后使用 select 插入停放的行

\n\n
insert into Book1 (col1, col2 ....)\nselect col1, col2, ...\nfrom my_temp_distinct\n
Run Code Online (Sandbox Code Playgroud)\n