如何将新表行插入现有表中的每个其他行?

时间:2011-06-29 23:46:53

标签: sqlite syntax insert modulus

好的我有一个sqlite数据库,大概有100行。我正在尝试做一件奇怪的事情,但我需要在每个现有行之间插入一个新行。

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

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

所以我基本上试图使用%-operator告诉我id是偶数还是奇数。对于每个偶数id号,我想插入一个新行。

我错过了什么?我能做些什么不同的事情?如何在每隔一行中插入一个新行并更新索引?

由于

2 个答案:

答案 0 :(得分:2)

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

行确实在磁盘上有一个订单,并且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 )。

我没有测试过上面的语句,因此我不知道它们是否可行或是否需要一些额外的技巧(如临时表),因为我们在一个语句中查询和更新同一个表。我也可能犯了语法错误。

答案 1 :(得分:0)

不要将行视为数据库中预先订购的。数据库将在它们进入时或根据索引存储它们。您可以根据需要在检索时(即,当您查询数据时)对它们进行排序。

相关问题