首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有允许表不包含数据但在查询时生成数据的数据库实现?

是否有允许表不包含数据但在查询时生成数据的数据库实现?
EN

Stack Overflow用户
提问于 2022-09-27 03:06:18
回答 3查看 25关注 0票数 -1

我有一个应用程序,它可以很好地处理数据库查询输出,但现在需要在一个数字范围内运行每个输出。当然,我可以重构应用程序来遍历范围,但是如果我可以在数据库中有一个“表”,可以与我的正常查询输出交叉连接,那么它可能会更干净。当然,我可以创建一个包含一系列值的表,但这似乎是不必要的浪费。

例如,数据库中的“表”表示一系列值,例如,在名为"number“的列中表示0到999,而不必实际存储100万行,但可以在与另一个表交叉连接的查询中使用,就好像实际存在这样的表一样。

我很好奇在任何数据库实现中是否存在这样的结构。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-27 03:37:43

PostgreSQL有系列。SQLite有作为一个可加载的扩展

代码语言:javascript
运行
复制
SELECT * FROM generate_series(0,9);

在支持递归CTE (SQLitePostgreSQLMariaDB)的数据库上,您可以这样做,然后与其连接。

代码语言:javascript
运行
复制
WITH RECURSIVE cnt(x) AS (
  VALUES(0)
  UNION ALL
  SELECT x+1 FROM cnt WHERE x < 1000000
)
SELECT x FROM cnt;

初始的select首先运行,然后返回一个列"1“的一行。这一行被添加到队列中。在步骤2a中,从队列中提取一行并添加到"cnt“中。然后按照步骤2c运行递归选择,生成一个值为"2“的新行,以将其添加到队列中。队列仍然有一行,因此步骤2重复。"2“行由步骤2a和2b提取并添加到递归表中。然后,将包含2的行用作递归表的完整内容,并再次运行递归选择,从而将值为"3“的行添加到队列中。这重复999999次,直到最后在步骤2a,队列上的唯一值是包含1000000的行。提取该行并将其添加到递归表中。但是这一次,WHERE子句导致递归-select不返回任何行,因此队列保持为空,递归停止。

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 03:35:58

我的问题的答案是“是否有任何数据库实现允许表不包含数据,但在查询时生成数据?”是的。例如,在sqlite中存在虚拟表:https://www.sqlite.org/vtab.html

事实上,它就像我在generate_series中所寻找的那样:https://www.sqlite.org/series.html

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 03:20:18

一般来说,这在很大程度上取决于您正在使用的数据库。例如,在SQLite中,您将生成从1到100的序列。你可以这样编码:

代码语言:javascript
运行
复制
WITH basic(i) AS (
  VALUES(1)
),
seq(i) AS (
  SELECT i FROM basic
  UNION ALL
  SELECT i + 1 FROM seq WHERE i < 100
)
SELECT * FROM seq;

希望按下你的铃铛。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73861933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档