PostgreSQL如何创建一组表示值矩阵的条目?

时间:2011-03-23 18:45:54

标签: sql postgresql

拓扑基础字段仍为xyzgradienttmestampuser 现在我遇到了用数据填充我的基础的问题。我有几个具有相同特征的补丁,但位置不同。 我通过准备一个插入语句和两个嵌套循环来解决它,这些循环改变了xyz在填充策略时被修复(至少在目前)。

程序化方法很慢,非常慢,所以我尝试在SQL中播放它并且我做得那么远:

insert into topo12 ("x","y","z","gradient","user","refresh")
select generate_series(2,4),generate_series(2,4),1024,12222563,'toto',1234567878;

但这并没有给出(逻辑上我知道但是......)一个矩阵,而是一个向量 到目前为止,我正在努力让进一步的子请求工作,所以任何暗示都赞赏。

2 个答案:

答案 0 :(得分:3)

我认为您想要的是一个连接,因此您可以生成两个系列的笛卡尔积:

> SELECT x, y FROM generate_series(1,2) AS x, generate_series(1,2) AS y;
 x | y 
---+---
 1 | 1
 1 | 2
 2 | 1
 2 | 2
(4 rows)

您当前正在从两个设置返回功能中进行选择。我不明白它的语义应该是什么,但它并不像你想要的那样产生笛卡尔值的产品:

> SELECT generate_series(1,2), generate_series(1,2);
 generate_series | generate_series 
-----------------+-----------------
               1 |               1
               2 |               2
(2 rows)

> SELECT generate_series(1,2), generate_series(1,3);
 generate_series | generate_series 
-----------------+-----------------
               1 |               1
               2 |               2
               1 |               3
               2 |               1
               1 |               2
               2 |               3
(6 rows)

答案 1 :(得分:1)

insert into topo12 ("x","y","z","gradient","user","refresh")
select
    (random() * 2)::int + 2,
    (random() * 2)::int + 2
    ,1024,12222563,'toto',1234567878
from generate_series(1, 10)