SQL:从 "nothing"中选择一个数字列表

标签 sql sqlite postgresql sequence

从包含数字列表的“无”中选择关系的快速/可读方法是什么。我想通过设置起始值和结束值来定义哪些数字。我正在使用 Postgres SQL 和 SQLite,并且对可在两个/多个平台上运行的通用解决方案感兴趣。

期望的输出关系:

# x
  0
  1
  2
  3
  4

我知道我可以从“无”中选择一行:SELECT 0,1,2,3,4 但是这会将值选择为列而不是行,并且需要指定所有值在查询中而不是仅使用我的开始和结束值:04

在 Postgres 中,您有一个特殊的 generate_series 函数来处理这种情况:

SELECT * FROM generate_series(0,4) x;

这很好用,但不是标准的。我也可以想象一些使用临时表的复杂解决方案,但我想要一些通用且简单的解决方案,例如:

SELECT * FROM [0..4]

也许使用 SEQUENCE 语句或 SELECT 0SELECT 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

SQL FIDDLE EXAMPLE

但是,据我所知,SQLite 中没有 WITH。

所以,可能的解决方案是

  • 创建一个用户定义的函数(this 可能会有帮助)
  • 创建一个包含从 0 到您需要的最大数字的表格,然后像这样从中选择:

    select Number from Numbers where Number >= 0 and Number <= 4
    

关于SQL:从 "nothing"中选择一个数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673549/

相关文章:

sql - 如何在postgresql中检查日期

php - 合并来自两个 PDO 查询的结果

python - 列表索引超出范围?

sql - 简单分组依据

java - Android:查询数据库时未捕获处理程序异常

iOS、Swift、SqLite、选择并显示所有行

sql - 在PostgreSQL中,如何获取所有登录 session 的用户,并在访问数据库时获取他们的IP地址和查询?

sql - 将成人数据集从文件加载到数据库

sql - 在 PostgreSQL 中搜索子字符串(第二部分)

PHP LIKE 不起作用