sql - 查询 JSON 列中的数组元素

标签 sql json postgresql postgresql-9.3 lateral

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

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

这只是用于问题目的的虚拟数据。

是否可以根据 id 查询 emails 数组中的特定项目?
差不多:“return email where id=123)”?

最佳答案

对于 Postgres 9.4+,请参阅 adamc 稍后的回答。或者:

Postgres 9.3 的原始答案

是的,这是可能的:

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

tbl 是您的表名,json_col 是 JSON 列的名称。

另见:

关于隐式CROSS JOIN LATERAL:

支持这种查询的索引:

关于sql - 查询 JSON 列中的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568123/

相关文章:

mysql - 在 SQL 数据库中创建一个名为 "select"的表

java - 如何从 session 中作为 JsonNode 访问 | ${user.get()}

postgresql - 如何通过学说查询 symfony2 模式中的表?

xml - 提取存储在 postgresql 表中的 XML 文件

具有多个外键的 SQL 关系

php - 在 PHP 和 MySQL 中显示溢出的每月目标

mysql - SELECT WHERE condition=met and condition=not-met, 但有相关行condition=met (JOIN?UNION?Subquery?)

java - 如何与 DefaultTyping 结合仅忽略 @JsonSerialize 注释

python - 如何在 Python 中检查字符串是否是有效的 JSON?

java - 如何使用 JDBC (PostgreSQL) 将登录凭据与数据库进行比较