You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用json_agg遇重复行,调试时出现json类型无相等运算符错误

问题解决:json类型无法用于GROUP BY及多余分组导致的错误

错误原因

PostgreSQL的json类型没有内置的相等比较运算符,因此不能直接将json类型字段放在GROUP BY子句中,这就是你触发could not identify an equality operator for type json错误的核心原因。

多余的GROUP BY操作

你的查询里,LATERAL子查询已经为每条product记录聚合出对应的product_options数组——每个product只会关联一行聚合后的结果,完全不需要额外执行GROUP BY分组操作。多余的分组不仅引发了类型错误,也是之前重复行问题的诱因之一。

修正后的SQL

SELECT 
      p.id,
      p.shop_id,
      p.provider_id,
      p.name,
      p.status,
      c.product_options
FROM product p
LEFT JOIN LATERAL (
    SELECT json_agg(json_build_object(
        'id', po.id,
        'p_id', po.p_id,
        'name', po.name
    )) AS product_options
    FROM product_options po
    WHERE p.id = po.p_id
) c ON true

补充说明

如果后续确实需要对JSON类数据进行分组或比较,可以将json转换为jsonb类型(jsonb支持相等比较),示例如下:

SELECT 
      p.id,
      p.shop_id,
      p.provider_id,
      p.name,
      p.status,
      c.product_options::jsonb AS product_options
FROM product p
LEFT JOIN LATERAL (
    SELECT json_agg(json_build_object(
        'id', po.id,
        'p_id', po.p_id,
        'name', po.name
    )) AS product_options
    FROM product_options po
    WHERE p.id = po.p_id
) c ON true
-- 若需分组,此时可使用转换后的jsonb类型字段
-- GROUP BY p.id, c.product_options::jsonb

内容的提问来源于stack exchange,提问作者Jsjs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:16:05