一尘不染

SQL:从``平滑''中选择一个数字列表。

sql

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

所需的输出关系:

# x
  0
  1
  2
  3
  4

我知道我可以从“ nothing”中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


阅读 189

收藏
2021-03-17

共1个答案

一尘不染

感谢所有答案!在讨论之后,我意识到使用数字表并不太复杂,并且在两种/多种平台上都能很好且快速地工作:

CREATE TABLE integers (i integer);
INSERT INTO integers (i) VALUES (0);
INSERT INTO integers (i) VALUES (1);
...
INSERT INTO integers (i) VALUES (9);
SELECT (hundreds.i * 100) + (tens.i * 10) + units.i AS x
FROM integers AS units
  CROSS JOIN integers AS tens
  CROSS JOIN integers AS hundreds

您只需创建一次此表,就可以在需要一定范围的数字时使用它。

2021-03-17