在sqlite中有没有循环语句,如FOR ..在.. LOOP或类似的东西?我有两列StartRange,EndRange,我需要在其他表中插入整个序列.因此,如果StartRange为1,EndRange为3,则需要使用三个带有值的插入,包含1,2,3.
如果您有一个额外的表,其中包含您需要的所有整数,您可以在直sql中执行此类操作.
假设您的StartRange和EndRange范围介于1到10之间,并且有如下表格:
sqlite> select i from ints; i 1 . . . 10
这个表格只包含你需要的所有可能的整数(即一到十个).
那么如果你也有这个:
sqlite> create table t (startrange int not null,endrange int not null); sqlite> insert into t values(1,3); sqlite> create table target (i int not null);
您可以使用连接将您的INSERT作为目标:
insert into target (i) select ints.i from ints join t on (ints.i >= t.startrange and ints.i <= t.endrange)
结果是这样的:
sqlite> select * from target; i 1 2 3
当然,你真正的t会有更多的行,所以你想要一个WHERE子句来限制你看哪一行.
类似的东西往往是用日期(查找“日历表”)完成的.
所以如果你的范围很小(对于一些小的定义),然后生成你的ints表一次,添加一个索引到它,并使用上面的技术来完成数据库内的所有INSERT.其他数据库有自己的方式(如Postgresql的generate_series
)来做这样的事情,而不需要一个显式的ints表,而sqlite(有意地)受限制.
sql通常是基于set的,所以循环不是自然的.通过描述你需要什么来构建适当的套件是什么自然的. OTOH,有时非自然的行为是必要和明智的.
我不知道这是否适用于您的应用程序,我只是想我会演示如何做到这一点.如果这种方法在你的情况下没有意义,那么你可以在数据库之外生成一堆INSERT语句.