首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复内连接结果

重复内连接结果
EN

Stack Overflow用户
提问于 2022-03-19 18:33:59
回答 1查看 88关注 0票数 -2

使用postgres,我试图获得一个用户和他们的所有帖子,但是当我内部加入用户和posts表时,我会收到以下内容:

代码语言:javascript
复制
-[ RECORD 1 ]------------------------------------------------------------------------------------------------------------------
PhotoPath   | 
Username    | username
Name        | user
Biography   | 
PicturePath | https://gourmetdemexico.com.mx/wp-content/uploads/2020/05/diferencia-entre-arte-y-cultura-taco-gringo-600x600.jpg
-[ RECORD 2 ]------------------------------------------------------------------------------------------------------------------
PhotoPath   | 
Username    | username
Name        | user
Biography   | 
PicturePath | http://www.travelettes.net/wp-content/uploads/2012/06/mystery2-600x600.jpg

查询:

代码语言:javascript
复制
SELECT 
    u."PhotoPath",
    u."Username",
    u."Name",
    u."Biography",
    p."PicturePath"
FROM "Users" as u 
INNER JOIN "Posts" as p ON u."ID" = p."UserID"
WHERE p."UserID" = 9;

我也试着做同样的事,但作为一个json

代码语言:javascript
复制
-[ RECORD 1 ]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
user | [{"photo" : null, "username" : "username", "name" : "user", "bio" : null}, {"photo" : null, "username" : "username", "name" : "user", "bio" : null}]
pics | {https://gourmetdemexico.com.mx/wp-content/uploads/2020/05/diferencia-entre-arte-y-cultura-taco-gringo-600x600.jpg,http://www.travelettes.net/wp-content/uploads/2012/06/mystery2-600x600.jpg}

查询:

代码语言:javascript
复制
SELECT json_agg(json_build_object(
    'photo', u."PhotoPath",
    'username', u."Username",
    'name', u."Name",
    'bio', u."Biografy"
)) as user,
array_agg(p."PicturePath") as pics
FROM "Users" as u
INNER JOIN "Posts" as p
ON u."ID" = p."UserID"
WHERE u."ID" = 9
GROUP BY p."UserID";

我知道为什么,但我不知道如何避免,有人能帮我弄到这样的东西吗?

代码语言:javascript
复制
user | {"photo" : null, "username" : "username", "name" : "user", "bio" : null}, 
pics | [https://gourmetdemexico.com.mx/wp-content/uploads/2020/05/diferencia-entre-arte-y-cultura-taco-gringo-600x600.jpg,http://www.travelettes.net/wp-content/uploads/2012/06/mystery2-600x600.jpg]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-19 20:28:15

通过这样做,我解决了这个问题:

代码语言:javascript
复制
WITH cte(j) AS (
    SELECT 
        jsonb_build_object(
            'photo', "PhotoPath",
            'username', "Username",
            'name', "Name",
            'bio', "Biography",
            'posts', array_agg(
                "Posts"."PicturePath"
            )
        )
        FROM "Users"
        INNER JOIN "Posts" ON "Posts"."UserID" = "Users"."ID"
        WHERE "Users"."ID" = @
        GROUP BY "Users"."ID"
)
SELECT json_agg(j) as user
FROM cte;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71540972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档