sql - 如何按键提取字段中的jsonb列
问题描述
我正在使用 postgresql 和 postgis 插件。
我已经用这个方案存储了数据:table_id is primary key, properties is a jsonb and geom as geometry(GeometryZ,4326)
;
如果我提出这个请求:select table_id, properties, geom from nametable
返回所有信息,table_id 为整数,属性为 jsonb,geom 为几何(GeometryZ,4326)。
我想要一个查询,其中属性返回 table_id,列的列表,其中列的名称是值的键,他的值和 geom。例如,如果属性具有名称和密度,则返回如下响应:table_id | name | density | 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';
推荐阅读
- excel - 客户有多行并希望在 Excel 中合并它们
- bash - Bash 检查环境变量中的布尔值
- html - 在 CSS 中,我可以根据里面的内容区分两个具有相同 href 值的按钮吗?
- awk - 无法使用 uniq -c 打印所有行的计数
- vue.js - 找不到入口模块中的错误:错误:无法解析“C:\project\projekt”中的“./src”
- python - 在 NumPy 中比较后是否可以返回字符串?
- mysql-workbench - 如何从具有特殊条件mysql的另一个表中创建一个新表
- postgresql - 现有对象的 Postgres 大对象不存在错误
- java - 如何对使用反射填充 subTypesOf 类的 java 代码进行单元测试?
- qt - 如何拆分嵌入在 DLL 中的 QML 文件?