SQLite循环语句?

前端之家收集整理的这篇文章主要介绍了SQLite循环语句?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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.其他数据库有自己的方式(如Postgresqlgenerate_series)来做这样的事情,而不需要一个显式的ints表,而sqlite(有意地)受限制.

sql通常是基于set的,所以循环不是自然的.通过描述你需要什么来构建适当的套件是什么自然的. OTOH,有时非自然的行为是必要和明智的.

我不知道这是否适用于您的应用程序,我只是想我会演示如何做到这一点.如果这种方法在你的情况下没有意义,那么你可以在数据库之外生成一堆INSERT语句.

猜你在找的Sqlite相关文章