我有一个关于Postgres中横向连接的问题。Postgres横向加入多个表来限制结果
我的用例是我想返回一个数据集合并多个表,但限制返回的出版物和评论的数量。简化的表架构低于
表作者
- ID
- NAME
表评分
- ID
- AUTHOR_ID
- PUBLICATION_ID
- CONTENT
表公开
- ID
- NAME
表AuthorPublication
- AUTHOR_ID
- PUBLICATION_ID
所以对于我的初始查询我有这样的:
SELECT a.id, a.name json_agg ( json_build_object ( 'id', r.id, 'content', r.content ) ) AS reviews, json_agg ( json_build_object( 'id', p.id, 'name', p.name ) ) AS publications FROM public.author a INNER JOIN public.review r ON r.author_id = a.id INNER JOIN public.author_publication ap ON ap.author_id = a.id INNER JOIN public.publication p ON p.id = ap.publication_id WHERE a.id = '1' GROUP BY a.id
这将返回我需要的数据,例如我得到作者的名字,id以及他们所有的评论和出版物的列表。我想要做的是限制评论和出版物的数量。例如,返回5个评论和3个出版物。
我试着用横向查询来做这件事,但是我遇到了一个问题,如果我做了一个横向查询,它按照预期工作。
所以像:
INNER JOIN LATERAL (SELECT r.* FROM public.review r WHERE r.author_id = a.id LIMIT 5) r ON TRUE
这将返回只有5的评论集 - 但如果我添加第二个横向查询
INNER JOIN LATERAL (SELECT ap.* FROM public.author_publication ap WHERE ap.author_id = a.id LIMIT 5) r ON TRUE
我现在得到25个结果审核并发布与重复/重复的数据。
所以我的问题是你是否允许在单个PG查询中有多个横向连接,如果不是,限制JOIN结果数量的好方法是什么?
谢谢!
当我更新我的查询到你的建议,我得到以下错误: ''' 列“r.id”必须出现在GROUP BY子句或在聚合函数 ''' 可以使用和添加GROUP BY给我: ''' [ERR] ERROR:由用作表达一个子查询返回多于一行 ' '' 但是,如果我只限于1,那么我只能得到一个结果。 – KukicAdo
我发现的另一个有趣的事情是运行以下查询: '''SELECT json_agg(r.uuid)FROM public.review r WHERE r.author_uuid ='b3113a70-e4bf-4b30-a9ca-9b0530a3115b'LIMIT 1 ''' Creates创建一个包含所有匹配字段的json数组。 但是,如果我删除json_agg,我只会得到第一个字段的1行。 – KukicAdo
对不起,编写没有db结构的查询是不方便的。当你问下一个问题时 - 请提供CREATE TABLE语句,一些典型数据和预期输出。 –