我有2个产品选项,但我得到了4行它为什么?它显示我的产品选项2x在我的数组
链接到sql在线代码
代码:
SELECT
p.id,
p.shop_id,
p.provider_id,
p.name,
p.status,
json_agg(json_build_object(
'id', pt.id,
'tag', pt.tag
)) AS tags,
json_agg(json_build_object(
'id', po.id,
'name', po.name
)) AS product_options
FROM product p
LEFT JOIN product_options po
ON po.p_id = p.id
LEFT JOIN product_tags pt
ON pt.p_id = p.id
WHERE p.id = 1
GROUP BY
p.id
字符串
你可以看到当你点击链接时,数组中的产品选项中有4个对象,但我只有两条记录,为什么我得到4个?
1条答案
按热度按时间bq9c1y661#
您可以从group by中删除
po.id
。它将像这样:字符串
下面是示例结果:
这里是样品提琴链接
对于后续问题,这是因为SQL查询中的连接。当您分别连接product_options和product_tags表时,可能会导致笛卡尔积,从而导致每个产品在product_options和product_tags表中的每个匹配行中重复。为了避免这种情况,您可以使用子查询为每个产品分别执行product_options和product_tags的聚合,然后将它们与主产品表连接起来。
下面是示例代码:
型
下面是输出:
的
这里是样品提琴链接