我有一個關於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語句,一些典型數據和預期輸出。 –