【问题标题】:Get one element from jsonb array in PostgreSQL从 PostgreSQL 的 jsonb 数组中获取一个元素
【发布时间】:2018-12-04 18:26:33
【问题描述】:

我的 PostgreSQL 数据库中有以下架构:

CREATE TABLE survey_results (
    id integer NOT NULL
);

CREATE TABLE slide_results (
    id integer NOT NULL,
    survey_result_id integer,
    buttons jsonb DEFAULT '[]'::jsonb
);

INSERT INTO survey_results (id)
  VALUES (1);

INSERT INTO slide_results (id, survey_result_id, buttons)
  VALUES (1, 1, '[{"text": "Not at all"}, {"text": "Yes"}]');

INSERT INTO slide_results (id, survey_result_id, buttons)
  VALUES (2, 1, '[{"text": "No"}, {"text": "Yes"}]');

还有以下查询:

WITH data AS ( 
  select 
    sr.id ,
    jsonb_agg(row_to_json(slr)) AS json_row
  from slide_results slr
  INNER JOIN survey_results sr ON sr.id = slr.survey_result_id
  group by sr.id
)

SELECT id, json_row->0->>'buttons' from data;

返回:

| id  | ?column?                                  |
| --- | ----------------------------------------- |
| 1   | [{"text": "Not at all"}, {"text": "Yes"}] |

我希望这个查询只返回按钮数组的第一个元素。我试过这样的事情:

WITH data AS ( 
  select 
    sr.id ,
    jsonb_agg(row_to_json(slr)) AS json_row
  from slide_results slr
  INNER JOIN survey_results sr ON sr.id = slr.survey_result_id
  group by sr.id
)

SELECT id, json_row->0->>'buttons'->>1 from data;

但这会返回错误:

Query Error: error: operator does not exist: text ->> integer

我该如何解决这个问题?

https://www.db-fiddle.com/f/gP761psywgmovfdTT7DjP4/1

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:
    SELECT id, json_row->0->'buttons'->>0 from data;
    

    您将'buttons' 称为文本而不是对象。

    数组的索引也是从 0 开始的,因此指向 1 将产生第二个元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 2015-08-20
      • 2016-08-20
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多