Postgres - 扩展稀疏数据

时间:2017-01-04 23:07:33

标签: postgresql

我有一张这样的表:

 x | y | f
 =========
 0 | 1  | 3.4
 1 | 2  | 3.5

表中仅存在某些x和y值。 PK是x,y。

我想展开它,以便所有 x和y值都存在。对于任何已存在的值,请保持f。对于新行,设置f = 0.因此,在上面,我们将添加(0,0,0.0), (1,0,0.0), (1,1,0.0)等。

我认为这可以通过generate_range的某种类型的JOIN来完成,但是我不知道如何只在原始表中没有记录的情况下才这样做。

1 个答案:

答案 0 :(得分:1)

INSERT INTO t (x, y, f)
SELECT a.x, b.y, 0.0
FROM
  generate_series(0, 1000000) a(x)
  CROSS JOIN generate_series(0, 1000000) b(y)
  LEFT JOIN t ON
    t.x = a.x AND t.y = b.y
  WHERE t.x IS NULL