【问题标题】:How to use generate_series() to generate a grid of values如何使用 generate_series() 生成值网格
【发布时间】:2018-11-23 17:03:30
【问题描述】:

我想生成一个由(行、列)对组成的网格,例如:

1 | 1
1 | 2
1 | 3
...
2 | 1
2 | 2
...

我的幼稚方法有这种令人费解的行为:

select generate_series(1,5), generate_series(1, 5);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               5
(5 rows)

select generate_series(1,5), generate_series(1, 4);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               1
               1 |               2
               2 |               3
               3 |               4
               4 |               1
               5 |               2
               1 |               3
               2 |               4
               3 |               1
               4 |               2
               5 |               3
               1 |               4
               2 |               1
               3 |               2
               4 |               3
               5 |               4
(20 rows)

似乎重复每个系列,直到到达具有每个系列的最终值的行。

将此函数用作与自身交叉连接的正确方法是什么?

【问题讨论】:

    标签: sql postgresql cross-join generate-series set-returning-functions


    【解决方案1】:

    将函数调用移至FROM 子句:

    SELECT *
    FROM   generate_series(1,5) a
         , generate_series(1,5) b;
    

    或者升级到 Postgres 10 或更高版本,最终改变了这种奇怪的行为。详细解释:

    以逗号分隔的FROM 项目交叉连接。见:

    【讨论】:

    • 啊,非常感谢。没有意识到我在做一些奇怪的事情。
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多