【发布时间】:2013-07-16 10:00:57
【问题描述】:
什么是从包含数字列表的“无”中选择关系的快速/可读方法。我想通过设置开始值和结束值来定义哪些数字。我正在使用 Postgres SQL 和 SQLite,并且会对可在两个/多个平台上运行的通用解决方案感兴趣。
期望的输出关系:
# x
0
1
2
3
4
我知道我可以从“无”中选择单行:SELECT 0,1,2,3,4 但这会将值选择为列而不是行,并且需要在查询中指定所有值,而不是仅使用我的开始和结束值:@ 987654324@和4。
在 Postgres 中,您有一个特殊的 generate_series 函数用于这种情况:
SELECT * FROM generate_series(0,4) x;
这很好用,但不是标准的。我也可以想象一些使用临时表的复杂解决方案,但我想要一些通用且简单的东西,例如:
SELECT * FROM [0..4]
也许使用SEQUENCE 语句或SELECT 0 和SELECT 4 的某种神奇组合?
【问题讨论】:
-
您不妨使用最多 1,000 的数字,我会说——也许在桌子上放一个索引。否则,创建 numbers_to_1000、numbers_to_1000000 等视图来封装这些交叉连接。
-
@Juve,你能接受一些答案还是发布你的答案并接受它?
-
当我开始寻找时,我惊讶于这个看似简单的任务实现起来有多么尴尬。这是一篇有更多可能性的文章(但它表明 PostgreSQL 中没有什么比 GENERATE_SERIES() 更重要):blog.jooq.org/2013/11/19/…
-
很多想法不适用于 BigQuery 等只读环境。
标签: sql sqlite postgresql sequence