sqlite 通过多于两行删除行组

Posted

技术标签:

【中文标题】sqlite 通过多于两行删除行组【英文标题】:sqlite delete rows group by having more than two rows 【发布时间】:2021-05-30 09:54:24 【问题描述】:

我具有以下表结构:

sqlite> select * from test;      
k1          k2          value     
----------  ----------  ----------
1           1           10        
1           1           20
1           1           30        
1           2           10

下面,我想(K1,K2),其具有多于两行上分组删除行。 P>

所以,我想删除前三行(1,1,10),(1,1,20)和(1,1,30)。 P>

我尝试以下:

delete from test where rowid in (select test.rowid from test group by k1,k2 having count(*) > 2);

但是,子查询仅给出最后ROWID:

sqlite> select test.rowid from test group by k1,k2 having count(*) > 2;
rowid     
----------
3

因此,所有三行没有得到删除。 而且,我无法直接在删除查询使用组通过。 P>

上任何想法,它如何可通过查询实现? P>

【问题讨论】:

【参考方案1】:

你可以使用exists:

delete from test
    where exists (select 1
                  from test t2
                  where t2.k1 = test.k1 and t2.k2 = test.k2
                  group by t2.k1, t2.k2
                  having count(*) > 2
                 );

或将in 与元组一起使用:

delete from test
    where (k1, k2) in (select t2.k1, t2.k2
                       from test t2
                       group by t2.k1, t2.k2
                       having count(*) > 2
                      );

【讨论】:

以上是关于sqlite 通过多于两行删除行组的主要内容,如果未能解决你的问题,请参考以下文章

不和谐 Java JDA |从 SQLite 删除数据/从 SQLite 获取数据 [关闭]

如何通过 C# 中的 ListView for Windows 8 应用程序删除 SQLite 中的行

如何从GridView项目中删除SQLite数据?

删除单个 SQlite 行 RecyclerView onSwiped

如何通过索引(而不是 id)在 SQLite 中获取一行

eclipse删除SQLite中的数据