sql—使用另一个表列中json格式的数据创建表

sycxhyv7  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(467)

我用的是postgres服务器。我的table是这样的

这意味着每部电影的类型栏的形式如下:

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

正如你所看到的,每部电影的类型都是不同的 VARCHAR json数组中的变量和。
我要做的是解压json的内容并创建一个名为 Genres ,每个流派都会有一个唯一的id。
对于上面的示例,我希望我的新表如下所示:

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

我该怎么做?

lsmd5eda

lsmd5eda1#

您应该明确地修复您的模式,并将您的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)

相关问题