什么是一个快速/可读的方法来选择一个关系从“nothing”包含一个数字列表。我想通过设置一个开始和结束值定义哪些数字。我正在使用Postgres SQL和SQLite,并会有兴趣在通用解决方案,将工作在两个/许多平台。
所需输出关系:
# x
0
1
2
3
4
我知道我可以从“nothing”中选择一行: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
的某种神奇组合?
7条答案
按热度按时间bn31dyow1#
那么在SQL服务器(和PostgreSQL)我会使用递归公共表表达式:SQL Server,PostgreSQL
SQL混乱示例
但是,据我所知,SQLite中没有WITH。
所以,可能的解决方案是
r6vfmomb2#
在PostgreSQL和SQLite中执行此操作的简单方法如下:
它应该可以在大多数RDBMS系统中工作,但在Oracle中您必须使用IIRC:
但我没有Oracle数据库来测试它。
wfypjpf43#
一些其他的选择(在postgres中尝试,但应与其他人合作)
select (0) as count union values (1),(2),(3),(4),(5)
用代码扩展这个sql将非常简单。
bvuwiixz4#
谢谢大家的回答!讨论结束后,我意识到使用numbers table并不太复杂,而且在两个/多个平台上都能很好地快速工作:
您只需创建此表一次,就可以在需要某个数字范围时使用它。
5t7ly7z55#
这对我在MS SQL中是有效的。这是一个小欺骗,因为它要求你查询的表至少有你想要返回的数字数量一样多的行数。在我的例子中,我只是想要一个五个优先级的列表,我可以绑定到一个下拉列表-但必须来自SQL,因为其他相关的UI元素的工作方式:
ax6ht2ek6#
如果有人正在寻找解决方案的MSSQL已知的有限数量的数字:
ztmd8pv57#
如果数量有限,我会选择: