PostgreSQL查询连接表并使用json_agg()获取嵌套的json输出

h4cxqtbf  于 2023-03-24  发布在  PostgreSQL
关注(0)|答案(2)|浏览(288)

因此,我必须要加入表,但得到一个错误。
表格如下所示。模式表格:
| patternUuid|网址名称|标题|
| - ------|- ------|- ------|
| 1b3d8a0f-2bc3-4c50-a00a-6cf99335dd20|信用卡欺诈|信用卡购物|
| 04bdcd7b-d61b-45cc-b9ea-c2decc77c852|退货政策欺诈|退货政策欺诈|
成员表:
| 身份证|成员ID|patternsUuid|
| - ------|- ------|- ------|
| 1个|1个|1b3d8a0f-2bc3-4c50-a00a-6cf99335dd20|
| 第二章|第二章|1b3d8a0f-2bc3-4c50-a00a-6cf99335dd20|
| 三个|三个|04bdcd7b-d61b-45cc-b9ea-c2decc77c852|
| 四个|三个|04bdcd7b-d61b-45cc-b9ea-c2decc77c852|
我的sql给我一个错误

SELECT "patternspatternUuid", "patterns.urlName", patterns.title, json_agg(members.memberId)
    FROM public.patterns
    JOIN members
    ON members.patternsUuid = patterns.patternUuid
    GROUP BY patterns.patternUuid

错误消息:
您访问的页面不存在!ON members.patternsUuid = patterns.patternUuid ^ HINT:也许您想引用列“members.patternsUuid”。
最后,我调用这个查询,并将它和端点以及JSON中的res设置为如下所示:

"patterns": [
    {
      "patternUuid": "1b3d8a0f-2bc3-4c50-a00a-6cf99335dd20",
      "title": "Credit Card Fraud",
       "urlName": "card-fraud"
      "description": "Lorem ipsum dolor sit",
      "members": [
        {
          "memberId": 1
        },
        {
          "memberId": 2
        }
      ],
    },
o0lyfsai

o0lyfsai1#

可能你的列是使用带引号的标识符声明的,因此members表中列的正确名称是patternsUuid(声明为"patternsUuid"),这是大小写敏感的。标识符members.patternsUuid是不带引号的,所以它等价于patternsuuid,这与真实的名称不匹配。
引用标识符也使其区分大小写,而未引用的名称总是折叠为小写。例如,标识符FOO,foo和“foo”被PostgreSQL认为是相同的,但“Foo”和“FOO”与这三个不同,并且彼此不同。(PostgreSQL中将未加引号的名称折叠为小写与SQL标准不兼容,它说,不带引号的名字应该折叠成大写。因此,根据标准,foo应该等效于“FOO”而不是“foo”。如果你想编写可移植的应用程序,建议你总是引用一个特定的名字,或者永远不要引用它。)

wgeznvg7

wgeznvg72#

所以我的查询结果是这样的,现在可以用了

SELECT "patternUuid", "urlName", title, json_agg(m."memberId") as members
FROM public.patterns p
JOIN members m
ON m."patternsUuid" = p."patternUuid"
GROUP BY p."patternUuid"

谢谢你的回答,正如你所看到的,我不得不像这样在大写的列周围使用引号:members.“memberId”

相关问题