我正在嘗試從 postgres 回傳一個 JSON 物件,它看起來像這樣:
[
{id: 1, name: "some organisation name", alias: [{alias:"alt name"}, {alias:"another name"}]}
...]
我下面的查詢作業正常,除了我想添加一個 where 條件,參考 org_aliases 表
SELECT json_build_object('id', table1.id, 'name', table1.name, 'alias', a.alias) as json
FROM orgs table1
CROSS JOIN LATERAL (
SELECT json_agg(agg) AS alias
FROM (
SELECT table2.alias as name
FROM org_aliases table2
WHERE
table2.org_id = table1.id
) agg
) a
WHERE
table1.name ilike 'nspcc'
or table2.alias ilike 'nspcc';
它在最后一行失敗(表 2 上的條件缺失)。我可以看到為什么它不允許我這樣做,因為我在子查詢中參考了一些東西。
我的問題是,處理這個問題的最佳方法是什么?我唯一的想法是我需要再次加入 org_aliases 以便我可以添加 where 條件。但是,如果有人對我如何構建查詢以避免重復有更好的想法,那就太棒了。
uj5u.com熱心網友回復:
不確定它是否正是您正在尋找的,但它確實為您提供了示例所需的結果:
SELECT
json_build_object('id', orgs.id
, 'name', name
, 'alias', json_agg(
json_build_object('name', alias)
)
)
FROM orgs
LEFT JOIN org_aliases ON orgs.id = org_aliases.org_id
WHERE name ILIKE '
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498446.html
標籤:PostgreSQL
