好的,我有一个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/