【发布时间】:2017-06-30 20:43:29
【问题描述】:
我有一个关于 Postgres 横向连接的问题。
我的用例是我想返回一个组合了多个表的数据集,但限制了返回的出版物和评论的数量。简化的表架构如下
表格作者
- 身份证
- 姓名
表格审核
- 身份证
- AUTHOR_ID
- PUBLICATION_ID
- 内容
表格发布
- 身份证
- 姓名
表作者发布
- 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 的结果数量?
谢谢!
【问题讨论】:
标签: postgresql join lateral