sql - PostgreSQL - 将数据从 jsonb 数组移动到单独的表

标签 sql postgresql jsonb

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

CREATE TABLE slides (
    id integer,
    question jsonb DEFAULT '{}'::jsonb
);

CREATE TABLE suggestions (
    id integer,
    slide_id integer,
    suggestion_text text
);


INSERT INTO slides (id, question)
  VALUES (1, '{"suggestions": ["Suggestion 1", "Suggestion 2"]}');

现在我想将question->>'suggestions' 移动到suggestions 表中。所以

SELECT * FROM suggestions; 应该返回:

------------------------------------------------------------------
id     | suggestion_test   | slide_id
------------------------------------------------------------------
1      | Suggestion 1      | 1     
2      | Suggestion 2      | 1   

我如何在 PostgreSQL 中执行此操作?这是您可以试验的 DBfiddle: https://www.db-fiddle.com/f/oEQf7ntttV5Wu9wyiXbEFk/0

最佳答案

我认为 suggestions.id 列应该是 serial:

CREATE TABLE suggestions (
    id serial,
    slide_id integer,
    suggestion_text text
);

使用函数jsonb_array_elements_text().

insert into suggestions(slide_id, suggestion_text)
select 
    id as slide_id, 
    value as suggestion_text
from slides
cross join jsonb_array_elements_text(question->'suggestions');

DbFiddle.

关于sql - PostgreSQL - 将数据从 jsonb 数组移动到单独的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909213/

相关文章:

mysql - SQL Server 如何创建带空格的列名

postgresql - 在 "PARALLEL"处或附近创建 postgis 扩展语法错误

sql - 函数内部查询返回NULL,查询返回一个值

sql - jsonb LIKE 查询数组中的嵌套对象

拉维尔 5.6。如何测试 JSON/JSONb 列

sql - 在 dbplyr 管道中使用类似 grepl 的字符串匹配

php - HTML 表的并行 MySQL 查询 - WHILE(x 或 y)?

sql - 页面刷新时 ASP.Net Web 应用程序中的多个 SQL 通知问题

postgresql - 在 Postgres 中为复合类型创建索引

postgresql - 根据通配符键查询嵌套json