PostgreSQL聚合函数调用不能使用jsonb_agg函数嵌套

PostgreSQL聚合函数调用不能使用jsonb_agg函数嵌套,json,postgresql,Json,Postgresql,我试图让我的查询返回JSON,以便在API中使用。我正在使用PostGIS扩展来处理位置信息。PostGIS扩展运行良好,与此问题无关。我之所以提到这一点,是因为查询中有与PostGIS扩展相关的函数。我拥有JSON文档的以下对象: 主要公司文件(OK) 与公司相关的事件(OK) 与事件相关的日期(*这是我们遇到问题的地方) 与公司相关的地址(OK) 与公司相关的城市(OK) 以下是我的SQL语句: SELECT c.id, c.name, c.website, c.longdescript

我试图让我的查询返回JSON,以便在API中使用。我正在使用PostGIS扩展来处理位置信息。PostGIS扩展运行良好,与此问题无关。我之所以提到这一点,是因为查询中有与PostGIS扩展相关的函数。我拥有JSON文档的以下对象:

  • 主要公司文件(OK)
  • 与公司相关的事件(OK)
  • 与事件相关的日期(*这是我们遇到问题的地方)
  • 与公司相关的地址(OK)
  • 与公司相关的城市(OK)
以下是我的SQL语句:

SELECT c.id, c.name, c.website, c.longdescription, c.description, c.email, 
jsonb_agg((SELECT ev FROM (SELECT ev.title, ev.description, ev.longdescription, jsonb_agg((SELECT ed FROM(SELECT ed.startdate, ed.enddate, ed.id WHERE ed.id notnull)ed)) AS dates, ev.id WHERE ev.id notnull)ev)) AS events, 
jsonb_agg((SELECT ca FROM (SELECT ct.zip, ca.id, ca.street1, ca.street2, ca.addresstype_id, ST_Y(ca.geopoint::geometry) AS latitude, ST_X(ca.geopoint::geometry) AS longitude WHERE ca.id notnull)ca)) AS addresses
FROM companies c
LEFT JOIN events ev ON ev.company_id = c.id
LEFT JOIN companyaddresses ca ON ca.company_id = c.id
LEFT JOIN cities ct ON ct.id = ca.city_id
LEFT JOIN eventdates ed ON ed.event_id = ev.id
GROUP BY c.id

有什么办法可以使我不使用嵌套函数而仍然得到正确的结果吗?

有问题的一行是

jsonb_agg((SELECT ev FROM (SELECT ev.title, ev.description, ev.longdescription, jsonb_agg((SELECT ed FROM(SELECT ed.startdate, ed.enddate, ed.id WHERE ed.id notnull)ed)) AS dates, ev.id WHERE ev.id notnull)ev)) AS events, 
如果将
jsonb_agg
移动到第二个子查询中,我认为它会起作用。所以改变

jsonb_agg((SELECT ed FROM(SELECT ed.startdate, ed.enddate, ed.id WHERE ed.id notnull)ed)) AS dates
进入


我不确定这是否有效,但如果您向
ed
ev
表提供CREATE语句,我可以对其进行优化。

因此我没有意识到由于连接,我有重复的记录。有什么建议吗?再次感谢。
(SELECT jsonb_agg(ed) FROM(SELECT ed.startdate, ed.enddate, ed.id WHERE ed.id notnull)ed) AS dates