sqlite - 如何将新表行插入现有表的每隔一行?

标签 sqlite syntax insert modulus

好的,我有一个sqlite数据库,大约有100行。我想做的事情很奇怪,但是我需要在每个现有行之间插入一个新行。

我一直在尝试使用Insert语句,如下所示,但是没有任何运气:

insert into t1(column1) values("hello") where id%2 == 0


因此,我基本上是尝试使用%运算符告诉我ID是偶数还是奇数。对于每个偶数编号,我想插入一个新行。

我想念什么?我可以做些什么?如何将新行插入其他行并同时更新索引?

谢谢

最佳答案

您的问题假设这些行具有某种内置顺序,并且您可以在其他行之间插入行。这不是真的。

的确,行在磁盘上有顺序,并且通常按顺序分配id列,但这是实现细节。执行查询时,数据库可以自由选择以任何选择的顺序返回行,除非您使用ORDER BY子句指定所需的行。

现在,我假设您真正想要的是按id顺序在现有行之间插入行。一种获得所需内容的方法如下所示:

UPDATE t1 SET id = id * 2
INSERT INTO t1 (id, column) SELECT id+1, "hello" FROM t1


UPDATE将所有现有行的id加倍(因此1,2,3变为2,4,6);那么INSERT会在t1上执行查询,并使用结果插入一组新的行,这些行的id值比现有行多一个(因此2,4,6变为3,5,7)。

我尚未测试以上语句,因此我不知道它们是否会工作,或者它们是否需要一些额外的技巧(例如临时表),因为我们正在一个语句中查询和更新同一表。另外我可能犯了语法错误。

关于sqlite - 如何将新表行插入现有表的每隔一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528535/

相关文章:

python - SQLITE 自定义 Accent 排序规则函数和 LIKE 查询

ruby-on-rails - Rails,SQLException:没有这样的列

java - 如何使用 Java 字符串变量中的参数在 SQLite 数据库中创建新表?

mysql - 如何在 MySQL 中进行批量插入

javascript - 使用插入的 HTML 中的参数调用 Javascript 函数

android - 从 Assets 文件夹复制数据库后android pie中没有这样的表错误

java - 尝试 "Finally"语句时出现语法错误

c# - 搜索中的 ":"是什么意思(名称,onlyActive : true)?

c# - BufferedImage 从 Java 到 C# 的等价物

mysql - 将 int 从类插入数据库(mysql)