当前位置: 首页 > 面试题库 >

包含某些内容的Postgres查询JSON数组

巴星华
2023-03-14
问题内容

Postgres具有此JSON数据类型,我想知道如何查询JSON数组中的数据?我正在使用Postgres 9.3.1

我已插入具有以下两个字段名称的PUBLISHER表:字符串和数据:json

INSERT INTO PUBLISHER (name, data) VALUES ('PUB1', [{"code":"PA1","author":"James","type":"Novel"},{"code":"PA2","author":"John","type":"Science"}]

INSERT INTO PUBLISHER (name, data) VALUES ('PUB2', [{"code":"PA1","author":"Dickens","type":"Novel"},{"code":"PA2","author":"Tom","type":"Comic"}]

我想查询并列出类型为“小说”的作者。在这种情况下,应该是“ James”和“ Tom”作为输出。

这种查询的内容:

select name, authorfromdata from publisher where data->type is "Novel"

问题答案:

您可以使用该json_array_elements函数SETOF json从数组生成:

SELECT name, json_array_elements(data) AS author
FROM publisher

有了它,您可以将其用作子查询,这样就可以过滤所需的内容,例如:

SELECT DISTINCT author->>'author'
FROM (
    SELECT name, json_array_elements(data) AS author
    FROM publisher
) t
WHERE t.author->>'type' = 'Novel';

请注意,如果此表中有很多行,则此类查询的性能(至少对于当前版本为9.3)将非常糟糕。我建议您将数据标准化到表中。



 类似资料:
  • 您将如何在存储在列中的数组中搜索元素?(更新:另请参阅列的9.4更新答案。) 如果我有这样一个JSON文档,存储在名为blob的列中: 我想做的是: 并取出所有匹配的行。但这不起作用,因为

  • 问题内容: 我有一个数据框,其中包含有关电影的信息。它有一个名为的列,其中包含它所属的流派列表。例如: 我想知道如何查询数据框,以便它返回属于某个类型的电影? 例如,可能会返回0或1。 我知道列表,可以做以下事情: 但是,在大熊猫中,我找不到类似的东西,我唯一知道的是,但它不适用于列表类型。 问题答案: 您可以使用create ,然后:

  • 问题内容: 我有一张桌子来存储有关我的兔子的信息。看起来像这样: 我该如何找到喜欢胡萝卜的兔子?我想出了这个: 我不喜欢那个查询。一团糟。 作为专职兔子管理员,我没有时间更改数据库架构。我只想适当地喂兔子。有没有更可读的方法来执行该查询? 问题答案: 从PostgreSQL 9.4开始,您可以使用operator: 如果改用 jsonb 类型,甚至可以在键上为查询建立索引: __ 当然,作为专职兔

  • 问题内容: 这是我的代码: 如何查询以某些字符开头的服务器?例如,我如何为仅以“ AA”开头的服务器服务? 我正在使用Oracle SQL btw。 问题答案: 你可以这样做

  • 问题内容: 我使用 PostgreSQL 9.5 和Rails5。我想查询下面显示的包含JSON对象数组的列,以返回包含并执行计数的所有JSON数组元素。我使用 的 SQL 显示在json数据下方。运行查询只会返回一个空数组。 这是我的数据: 我想要其中一个sql查询返回: 和另一个查询以返回数组,以便我可以在应用程序中对其调用count,还可以遍历它以创建表单: 我试过这个SQL查询: 我也试过

  • 我使用PostgreSQL 9.5和Rails 5。我想查询下面显示的包含JSON对象数组的jsonb列,以返回包含的所有JSON数组元素,并执行计数 我使用的SQL显示在json数据下面。运行查询只返回一个空数组。 我尝试了这里和这里建议的查询。 这就是我的jsonb数据的样子: 我希望其中一个sql查询返回: 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并循环使用它来创建表