【发布时间】:2015-06-26 15:44:53
【问题描述】:
我的 postgres 数据库(9.3 版)中有一个土地覆盖值表。键值为“huc12code”,表示空间区域。这是土地覆盖表的第一个条目(它有 1700 多行):
huc12code | open_water | developed | bare_earth | managed | heritage
030402080205 | 0.107027 | 0.0215444 | 0.406911 | |
管理和遗产土地的面积在此表中为空,但存储在单独的表中。他们还将huc12code 作为第一列:
来自temp_heritage 表:
huc12code | heritage
-------------+-------------
030101020801 | 0.0402684
来自temp_managed 表:
huc12code | managed
-------------+-------------
030101020802 | 0.000385026
我想将管理和遗产字段合并到我的土地覆盖表中,但我发现两个问题:
landcover表中的大部分huc12code字段都可以在temp_managed和temp_heritage中找到,但有些不是。这是因为“临时”表不包括heritage和managed字段等于 0 的地方。我确实希望
landcover表包含一个 0 值,其中heritage和managed字段为 0,但由于这些值实际上并不存在于“临时”表中,我需要一些逻辑为huc12code中的每个huc12code插入零的heritage字段,但不在temp_heritage中(对于管理字段也是如此)。
【问题讨论】:
-
左外连接也是如此,然后使用 COALESCE 将这些列中的空值替换为默认值(零或其他)。
-
这似乎可以查询我要插入的列:SELECT coalesce(temp_heritage.heritage,0) FROM landcover LEFT JOIN temp_heritage ON landcover.huc12code = temp_heritage.huc12code;
-
如何结合INSERT INTO命令,将结果插入到landcover中?我对那个命令没有太多经验,我不想搞砸我的土地覆盖表。
标签: sql postgresql sql-update