我有多个不同年份的数据集作为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));
虽然这显然是错误的/有其缺陷。
由于我不熟悉数据库,所以我无法确定这是查询问题还是数据库结构问题。
我希望任何人都可以提供帮助,我们非常感谢您的时间和精力! 添
答案 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
字段创建索引。如果是这样的话,请在评论中告诉我。