【问题标题】:Psql querying json arraysPsql查询json数组
【发布时间】:2014-11-27 10:28:22
【问题描述】:

我存储在 postgres db 中的 json 具有以下结构。我需要获取所有电子邮件域为“gmail.com”的行

第 1 行:

{
   "student_id": "123",
   "name": "foo",
   "emails":[
      {
        "id": "777",
        "domain": "gmail.com"
      },
      {
        "id": "888",
        "domain": "gmail.com"
      }
   ]
} 

第 2 行:

{
   "student_ id": "345",
   "name": "booo",
   "emails":[
      {
        "id": "444",
        "domain": "gmail.com"
      },
      {
        "id": "555",
        "domain": "yahoo.com"
      }
   ]
} 

在这种情况下,我的结果应该只是学生 ID 为 123 的学生,即第 1 行。请帮忙。

【问题讨论】:

    标签: arrays json postgresql postgresql-9.3


    【解决方案1】:

    假设表名是student,而保存json数据的字段名是data

    WITH
      mail_domain AS (
        SELECT
          (data->'student_id')::text AS student_id,
          (JSON_ARRAY_ELEMENTS(data->'emails')->'domain')::text AS domain
        FROM
          student),
    
      selected_student AS (
        SELECT
          student_id
        FROM
          mail_domain
        WHERE
          domain = '"gmail.com"'
    
        EXCEPT
    
        SELECT
          student_id
        FROM
          mail_domain
        WHERE
          domain != '"gmail.com"')
    
    SELECT
      *
    FROM
      student
    WHERE
      (data->'student_id')::text IN (
        SELECT
          student_id
        FROM
          selected_student);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多