程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PostgreSQL 请求 json_agg 重复结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决POSTGReSQL 请求 json_agg 重复结果?

开发过程中遇到postgreSQL 请求 json_agg 重复结果的问题如何解决?下面主要结合日常开发的经验,给出你关于POSTGReSQL 请求 json_agg 重复结果的解决方法建议,希望对你解决POSTGReSQL 请求 json_agg 重复结果有所启发或帮助;

我的 sql 请求有问题,看起来像这样

SELECT 
    Json_build_object('ID',u.id,'personnes_morale',Json_build_object('denomination',pm.denomination),'personne_physique',Json_build_object('nom_patronyme',pp.nom_patronymE),'representants',Json_agg(Json_build_object('name',r.Name)),'observations',Json_agg(Json_build_object('ID',o.ID))
)
FROM
    dossIErs_entreprises u
    left JOIN personnes_morales pm ON pm.numero_gestion = u.numero_gestion
    left JOIN personnes_physiques pp ON pp.numero_gestion = u.numero_gestion
    left JOIN representants r ON r.numero_gestion = u.numero_gestion
    left JOIN observations o ON o.numero_gestion = u.numero_gestion
WHERE
    u."numero_gestion" = '1955B08131'
GROUP BY
    u.id,pp.ID,pm.ID
liMIT 1;

它应该给我这样的东西:

{
ID:'123',personne_morale:{denomination: 'test'},personne_physique:{nom_patronyme: 'Smith'},representants:[{name:'John'},{name:'Smith'}],observations:[{ID:'1'},{ID:'2'}]
}

是因为我有两个 Json_agg(我只测试了一个代表并且效果很好)它返回给我类似的东西:

{
ID:'123',... <- *personne_morale*
... <- *personne_physique*
representants:[{name:'John'},{name:'John'},{name:'Smith'},{name:'Smith'}]
observations:[{ID:'1'},{ID:'1'}{ID:'2'},{ID:'2'}]
}

它重复了我的“代表”和“观察”结果,我不明白为什么

你有什么解决办法

提前致谢

解决方法

这似乎是意料之中的,您只需通过执行 JOIN 即可获得笛卡尔积。

如果你想独立填充这些数组,我建议改用子查询:

SELECT 
    json_build_object('id',u.id,'personnes_morale',json_build_object('denomination',pm.denomination),'personne_physique',json_build_object('nom_patronyme',pp.nom_patronymE),'representants',(
         SELECT json_agg(json_build_object('name',r.Name))  
         FROM representants r
         WHERE r.numero_gestion = u.numero_gestion
    ),'observations',(
         SELECT json_agg(json_build_object('id',o.id))
         FROM observations o
         WHERE o.numero_gestion = u.numero_gestion
    )
)
FROM
    dossiers_entreprises u
    LEFT JOIN personnes_morales pm ON pm.numero_gestion = u.numero_gestion
    LEFT JOIN personnes_physiques pp ON pp.numero_gestion = u.numero_gestion
WHERE
    u."numero_gestion" = '1955B08131'
LIMIT 1;

(顺便说一句,为了避免下一个惊喜:您可能希望在子查询周围使用 COALESCE(…,'[]'),@R_454_6607@找到行,它们将返回 NULL 而不是空数组)

大佬总结

以上是大佬教程为你收集整理的PostgreSQL 请求 json_agg 重复结果全部内容,希望文章能够帮你解决PostgreSQL 请求 json_agg 重复结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。