最近升级到使用PostgreSQL 9.3.1来利用JSON功能.在我的表中,有一个json类型的列,其 struct 如下:

{
   "id": "123",
   "name": "foo",
   "emails":[
      {
        "id": "123",
        "address": "somethinghere"
      },
      {
        "id": "456",
        "address": "soemthing"
      }
   ]
} 

这只是问题中的虚拟数据.

是否可以根据id查询邮箱数组中的特定项目

推荐答案

是的,这是可能的:

SELECT *
FROM   tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE  elem->>'id' = 123;

tbl是表名,json_col是JSON列的名称.

更多详情请参见本相关答案:

关于这个相关答案最后一段中隐含的CROSS JOIN LATERAL的更多信息:

支持此类查询的索引:

Postgresql相关问答推荐

转换失败:(—122.763091,49.04676)转换为地理(位置)""

Postgres查询按月和年分组的总计数

PostgreSQL存储过程中不存在游标

如何将 SELECT 查询的结果插入表中?

安装age-installation时出错

使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

在 KnexJS 中插入

并行取消嵌套多个数组

PostgreSQL错误致命:角色 username不存在

当脚本工作时,Postgres now() 时间戳不会改变

PostgreSQL 如何比 SQLite 更快地执行写入?

Select 日期最高的行

SQL:当谈到 NOT IN 和 NOT EQUAL TO 时,哪个更有效,为什么?

datagrip 无法应用更改 此表是只读的

仅在存在时重命名列

python pip install psycopg2 安装错误

如何在postgresql中编写关于最大行数的约束?

postgres regexp_replace 只想允许 a-z 和 A-Z

如何在 PostgreSQL 中生成一系列重复数字?

Rails Migrations:试图将列的类型从字符串更改为整数