postgresql - Postgis 数据库结构 : Identical tables for multiple years?

标签 postgresql database-design postgis shapefile

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

我有表 boris2018、boris2017、boris2016 等等。 它们都共享相同的模式,现在让我们关注以下列(示例是 boris2018 表中的一行)。这些行代表具有某些属性的实际 postgis 几何体。

 brw | brwznr |  gema   | entw | nuta
-----+--------+---------+------+------
 290 | 285034 | Sieglar | B    | W

'brwznr' 列是某种 ID,但对于每个几何图形,它似乎在所有年份中都不是完全一致的。 再者,大多数表都包含重复信息。每年的几何结构应该相同,但也不能保证这一点。

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

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

这导致一些数据丢失(因为没有找到匹配的 brwznr),一些数据错误匹配(因为一些匹配由于数据不一致而错误)并且感觉不对.

我真正想要实现的是进行快速查询,让我获得特定坐标的不同 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));

虽然这显然是错误的/有其缺陷。 由于我是一般的数据库新手,所以我无法真正判断这是查询问题还是数据库结构问题。

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

最佳答案

您是否尝试过使用 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 字段创建索引。如果是这种情况,请在评论中告诉我。

关于postgresql - Postgis 数据库结构 : Identical tables for multiple years?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50715472/

相关文章:

sql - 我应该如何命名将两个表映射在一起的表?

sql-server - SQL Server - 空列的性能/大小缺点

regex - 使用列数据作为正则表达式匹配的模式

database - Postgresql,更新多行并停止更新条件

mysql - 数据库设计一张表或两张表

postgresql - 使用 PostgREST 插入/更新 PostGIS 几何列

python - 如何计算 GeoDjango 中两点之间的 3D 距离(包括高度)

postgresql - 如何在 postgres(postgis)查询中将错误转换为 null?

postgresql - 使用先前 DO 子句中的变量

ruby-on-rails - docker-compose rails app 在用完时找不到数据库,但在运行时找到了