代码之家  ›  专栏  ›  技术社区  ›  wasay

Postgres json数据过滤查询

  •  0
  • wasay  · 技术社区  · 3 年前

    我是sql的新手,并试图让这个postgressql查询在我需要过滤嵌套json数组中的端口的地方工作。这是我的json数据集。

    [ { “版本”:“1.3”, “配置”:{ “ipPerms”:[ { “端口”:1234, “来自端口”:0 } ] } }, { “版本”:“1.3”, “配置”:{ “ipPerms”:[ { “端口”:5467, “来自端口”:0 }, { “端口”:143, “来自端口”:0 } ] } } ]

    主表有两列idINT和datajsonb。

    这是我试过的。

    选择 id, jsonb_array_elements(数据->'configuration'->'sipPerms')->!'端口'作为到端口 从…起 组 哪里 jsonb_array_elements(数据->'configuration'->'sipPerms')->!'端口'IN( 选择 p.port 来自 数据库d 在d.id=p.database_id上加入端口p )

    我收到以下错误:

    WHERE中不允许设置返回函数

    我看到过有人在where子句中推荐子查询的帖子,但当列本身需要使用函数进行转换时,我真的不知道如何实现这一点。如有任何帮助,我们将不胜感激。

    1 回复  |  直到 3 年前
        1
  •  0
  •   Maimoona Abid    3 年前

    通过使用如下子查询,可以根据嵌套的JSON数组元素过滤主表。

    SELECT id
    FROM (
        SELECT
            id,
            jsonb_array_elements(data -> 'configuration' -> 'ipPerms') ->> 'Port' AS to_port
        FROM groups
    ) AS subquery
    WHERE to_port IN (
        SELECT p.port
        FROM databases d
        JOIN ports p ON d.id = p.database_id
    );
    

    希望它能起作用:)