sql - 如何通过键提取字段中的jsonb列

标签 sql postgresql postgis

我正在使用 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;

我的问题是我不知道如何使用子查询生成该查询。

enter image description here

最佳答案

您是否尝试过使用 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/

相关文章:

mysql - 为什么 INNODB 批量插入会导致自动增量主键跳过值?

php - pg_query_params 返回错误 : bind message supplies 2 parameters, 但准备语句 ""需要 1

gis - 带有经纬度SRID的PostGIS中的真实(大圆)距离?

mysql - 来自数据库的 SQL UPDATE bool 值,选择 number 的最小值 WHERE boolean=false

mysql - SQL查询以获得最大的 Markdown

Python:从Thread调用时解密失败或错误记录mac

sql - 将带有 IN/NOT IN 的 PostgreSQL 查询转换为 JOIN

SQL 选择多边形内的要素

django 2.1.3 'django.db.backends.postgis' 不是可用的数据库后端

c# - 数据库查询中的存储过程与代码