我正在使用 postgresql 和 postgis 插件。
我使用此方案存储数据:table_id是主键,properties是jsonb,geom是geometry(GeometryZ,4326)
;
如果我提出此请求:select table_id,properties,geom from nametable
返回所有信息,其中table_id为整数,属性为jsonb,geom为几何(GeometryZ,4326)。
我想要一个查询,其中属性返回 table_id,一个列列表,其中列名是值的键及其值和几何。例如,如果属性具有名称和密度,则返回如下响应:table_id |名称 |密度| geom |
,但我不知道属性的名称,所以我认为这应该是该查询中获取键名称的查询。
我最接近得到它的是这个查询:select jsonb_object_keys(properties) as key from nametable;
谢谢
编辑:
首先,我在 postgressql 数据库中存储了一个字段作为 jsonb,所以我想将该 jsonb 提取到列中。但已将包含不同属性的不同表存储到 jsonb 列中。
因此,我们的想法是获取一个查询,其中选择 table_id、属性(在多列中提取)和 geom。
1 - 有了这个,我就有了键的名称:select jsonb_object_keys(properties) as key from nametable group by key;
2 - 使用键在列中获取每个键的所有值。
3 - 返回一个查询,当我调用它时,返回 table_id、从 jsonb 中提取的属性列、从 nametable 中提取的 geom;
我的问题是我不知道如何使用子查询生成该查询。
最佳答案
您是否尝试过使用 CTE
?
WITH j AS (
SELECT
table_id,
properties->>'name' AS name,
properties->>'density' AS density,
geom
FROM t)
SELECT * FROM j WHERE j.name = 'Alabama';
关于sql - 如何通过键提取字段中的jsonb列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374136/