postgresql - Postgresql,如何选择没有重复行的json对象
问题描述
我试图找出如何获取所选行的 JSON 对象结果,而不是显示重复的行。
我目前的查询:
SELECT DISTINCT ON (vp.id) jsonb_agg(jsonb_build_object('affiliate',a.*)) as affiliates, jsonb_agg(jsonb_build_object('vendor',vp.*)) as vendors FROM
affiliates a
INNER JOIN related_affiliates ra ON a.id = ra.affiliate_id
INNER JOIN related_vendors rv ON ra.product_id = rv.product_id
INNER JOIN vendor_partners vp ON rv.vendor_partner_id = vp.id
WHERE ra.product_id = 79 AND a.is_active = true
GROUP BY vp.id
我从中收到的结果是:
[
affiliates: {
affiliate: affiliate1
affiliate: affiliate2
},
vendors: {
vendor: vendor1,
vendor: vendor1,
}
正如您在第二条记录中看到的, vendor 仍然是 vendor1 因为没有更多结果,所以我也想知道是否有办法删除重复项。
谢谢。
解决方案
第一点:您在上面显示的结果不符合 json 类型:键没有双引号,字符串值没有双引号,在同一个 json 对象中有重复的键 ('{"affiliate":" affiliate1", "affiliate": "affiliate2"}' :: json) 不接受 jsonb 类型(但它是 json 类型)。
第二点:可以尝试DISTINCT
直接在jsonb_agg函数中添加关键字:
jsonb_agg(DISTINCT jsonb_build_object('vendor',vp.*))
并删除该DISTINCT ON (vp.id)
子句。
您还可以直接在任何聚合函数中添加 ORDER BY 子句。有关详细信息,请参阅手册。
推荐阅读
- php - 如何使用 PHP curl 命令登录网站
- python - 在列表中的不同索引点插入值
- php - 如何调试 PHP (Laravel) 中的“Symfony\Component\Debug\Exception\FatalErrorException”错误?
- html5-canvas - 缩放画布而不扭曲 lineWidth 或破坏剪辑
- javascript - 使用 null 和 undefined vars 组合测试
- python - python列表中连续数字的操作
- docker - dockerfile中的git commit hash作为标签
- time - JMETER -> 如何在 jmeter.properties 文件中更改 GMT 时区
- java - 超类作为列表中的附加类型
- excel - IF 和 else if 将数据粘贴到三个不同的工作表中