我有一个表,它基本上包含 3 列:ID
, FIRST
, LAST
。它们都是整数。
我想知道是否有一种方法可以使用 generate_series() 来获取查询结果,对于原始表中的每一行,有很多行包含 和 之间的FIRST
数字LAST
?
例如,对于包含数据的行,(42, 5, 8)
输出包含行(42, 5)
、和。(42, 6)
(42, 7)
(42, 8)
我有一个表,它基本上包含 3 列:ID
, FIRST
, LAST
。它们都是整数。
我想知道是否有一种方法可以使用 generate_series() 来获取查询结果,对于原始表中的每一行,有很多行包含 和 之间的FIRST
数字LAST
?
例如,对于包含数据的行,(42, 5, 8)
输出包含行(42, 5)
、和。(42, 6)
(42, 7)
(42, 8)
这可以通过使用来实现
generate_series()
在线示例:https ://rextester.com/TWE47868
在 Postgres 10 或更高版本中,它可以像这样简单:
在旧版本中,不建议在
SELECT
列表中设置返回函数。看:不返回任何内容的行将以
generate_series()
这种方式从结果中排除(例如,当last
<first
或 is时NULL
)。对于CROSS JOIN
a_horse 演示的更明确的语法变体也是如此。可能合意也可能不合意。如果不是,请LEFT JOIN .. ON true
改用:(
LATERAL
在这种情况下是一个干扰词,因为它假定用于列表中的函数FROM
。)看:
db<>fiddle here(演示极端情况)