我们有一张桌子'书':
id - int
data - text
实际上我们应该将数据保存为jsonb列,但我们已经创建了这个表,并且不打算迁移。
我们可以在需要时将它转换为jsonb。
我的问题是
在数据中我有{"genres":[{"text":"Crime","id": "1"},{"text":"Romance","id": "5"}],"name":"Harry Potter"}
我需要一个选择查询来显示为每本书分隔的逗号类型的所有文本。
我怎样才能做到这一点?
我试过这个,
select data::json -> 'genres' as genres
from books
where data::json -> 'genres' is not NULL
limit 1;
然而,这也显示了id,它还显示方括号。
使用json_array_elements
select string_agg(j->>'text',',') from books
cross join lateral json_array_elements(data::json->'genres') as j
如果您想要每本书,请添加group by id
或任何唯一标识书籍的内容。