从包含数字列表的“无”中选择关系的快速/可读方法是什么。我想通过设置起始值和结束值来定义哪些数字。我正在使用 Postgres SQL 和 SQLite,并且对可在两个/多个平台上运行的通用解决方案感兴趣。
期望的输出关系:
# x
0
1
2
3
4
我知道我可以从“无”中选择一行:SELECT 0,1,2,3,4
但是这会将值选择为列而不是行,并且需要指定所有值在查询中而不是仅使用我的开始和结束值:0
和 4
。
在 Postgres 中,您有一个特殊的 generate_series
函数来处理这种情况:
SELECT * FROM generate_series(0,4) x;
这很好用,但不是标准的。我也可以想象一些使用临时表的复杂解决方案,但我想要一些通用且简单的解决方案,例如:
SELECT * FROM [0..4]
也许使用 SEQUENCE
语句或 SELECT 0
和 SELECT 4
的某种神奇组合?
最佳答案
在 SQL 服务器(和 PostgreSQL)中,我会使用递归公用表表达式:SQL Server , PostgreSQL
with recursive Numbers as (
select 0 as Number
union all
select Number + 1
from Numbers
where Number < 4
)
select Number
from Numbers
但是,据我所知,SQLite 中没有 WITH。
所以,可能的解决方案是
- 创建一个用户定义的函数(this 可能会有帮助)
创建一个包含从 0 到您需要的最大数字的表格,然后像这样从中选择:
select Number from Numbers where Number >= 0 and Number <= 4
关于SQL:从 "nothing"中选择一个数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673549/