我想使用generate_series()
生成一个列列表,并将其连接到特定的数组(值列表,例如[1, 2, 3]
(,我的预期结果如下所示:
Day | Code
2019-08-01 | 1
2019-08-02 | 1
2019-08-03 | 1
2019-08-01 | 2
2019-08-02 | 2
2019-08-03 | 2
2019-08-01 | 3
2019-08-02 | 3
2019-08-03 | 3
此查询:
SELECT generate_series(timestamp '2019-08-01'
, timestamp '2019-08-03'
, interval '1 day') AS DAY, 1 AS CODE;
会给我结果:
Day | Code
2019-08-01 | 1
2019-08-02 | 1
2019-08-03 | 1
那么如何更新查询以获得预期的结果呢?
这是产生所需结果的多种方法之一:
SELECT day::date, code
FROM generate_series(timestamp '2019-08-01'
, timestamp '2019-08-03'
, interval '1 day') day
CROSS JOIN unnest ('{1,2,3}'::int[]) code; -- using an actual array here
关键是:你需要一个CROSS JOIN
来生产笛卡尔乘积。