使用其他人的表列中的数据以JSON格式创建表

问题描述 投票:0回答:1

我正在使用Postgres服务器。这是我的桌子的外观

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS85cWp4OS5wbmcifQ==” alt =“这里是我的表格。”>

这意味着每部电影的类型列均采用以下格式:

[
    {'id': 18, 'name': 'Drama'},
    {'id': 36, 'name': 'History'},
    {'id': 10749, 'name': 'Romance'}
]

您可以看到每部电影的流派都在VARCHAR变量和JSON数组中。

我想做的是解压JSON的内容,并创建一个名为Genres的新表,该表将使用其唯一ID来对每种流派都使用一次。

所以对于上面的示例,我希望新表看起来像这样:

id  | genre
18  | 'Drama'
36  | 'History'.

我该怎么做?

sql json postgresql postgresql-9.5
1个回答
0
投票

您应该明确地修复您的架构,并将JSON数据存储为JSON[B]数据类型而不是字符串。

就是说,一种选择是强制转换为json,这样我们便可以使用Postsgres强大的json函数取消嵌套数组并访问内部对象。就您的数据显示而言,您只需将单引号变为双引号即可使字符串有效为Postgres JSON,因此应该可以:

insert into genres(id, genre)
select distinct js ->> 'id', js ->> 'name'
from mytable t
cross join lateral jsonb_array_elements( (replace(genres, ''', '"'))::jsonb ) j(js)
© www.soinside.com 2019 - 2024. All rights reserved.