Postgis数据库结构:多年的相同表格?

时间:2018-06-06 08:18:00

标签: postgresql database-design postgis shapefile

我有多个不同年份的数据集作为shapefile并将它们转换为postgres表,这使我遇到以下情况:

我有表boris2018,boris2017,boris2016等等。 它们都共享一个相同的模式,现在让我们关注以下列(例如,boris2018表中的一行)。行代表具有特定属性的实际postgis几何。

 brw | brwznr |  gema   | entw | nuta
-----+--------+---------+------+------
 290 | 285034 | Sieglar | B    | W
' brwznr' column是某种ID,但对于每个几何体,它在所有年份似乎都不完全一致。 然后,大多数表格都包含重复信息。几何应该每年都相同,但这也不能保证。

我首先要做的是将每年的brwznr与2018年的数据相匹配,在我的boris2018数据中添加brw17,brw2016,...列,如下所示:

 brw18 | brw17 | brw16 | brwznr |  gema   | entw | nuta
-------+-------+-------+--------+---------+------+------
  290  |  260  |  250  | 285034 | Sieglar | B    | W

这导致一些数据丢失(因为找不到匹配的brwznr),一些数据错误匹配(因为某些匹配由于数据不一致而错误)并且它感觉不对< / em>的

我真正想要实现的是快速查询,为我获取某个坐标的不同brw值,这些都是

SELECT ortst, brw, gema, gena 
FROM boris2018, boris2017, boris2016
WHERE ST_Intersects(geom,ST_SetSRID(ST_Point(7.130577, 50.80292),4326));

SELECT ortst, brw18, brw17, brw16, gema, gena 
FROM boris
WHERE ST_Intersects(geom,ST_SetSRID(ST_Point(7.130577, 50.80292),4326));
虽然这显然是错误的/有其缺陷。 由于我不熟悉数据库,所以我无法确定这是查询问题还是数据库结构问题。

我希望任何人都可以提供帮助,我们非常感谢您的时间和精力! 添

1 个答案:

答案 0 :(得分:1)

您是否尝试使用CTE

WITH j AS (
   SELECT ortst, brw, gema, gena FROM boris2016
UNION 
   SELECT ortst, brw, gema, gena FROM boris2017
UNION 
    SELECT ortst, brw, gema, gena FROM boris2018)
SELECT * FROM j
WHERE ST_Intersects(j.geom,ST_SetSRID(ST_Point(7.130577, 50.80292),4326));

根据您的需要,您可能想要使用UNION ALL。请注意,在处理非常大的表时,这种方法可能不是最快的方法。如果是这种情况,请考虑将这三个查询的结果合并到另一个表中,并使用geom字段创建索引。如果是这样的话,请在评论中告诉我。