我用json_agg和json_build选择了一些表,所有的工作,但我得到了一些数据,我不想要它,
我的product_media(pm)是空的,没有图像,如果我使用json_agg(json_build_object)),那么我得到了所有行的3x次null,如下所示:
product_media: [
{
id: null,
src: null,
alt: null,
s_position: null,
updated_at: null
},
{
id: null,
src: null,
alt: null,
s_position: null,
updated_at: null
},
{
id: null,
src: null,
alt: null,
s_position: null,
updated_at: null
}
],
字符串
我怎么能说当id是空的,然后不显示它,或者当没有产品媒体被发现,然后使一个空数组?
验证码:
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', pm.id,
'src', pm.src,
'alt', pm.alt,
's_position', pm.s_position,
'updated_at', pm.updated_at
)) AS product_media
po.id as po_id,
po.name,
po.position,
pov.id as pov_id,
pov.value,
pv.id as pv_id,
pv.quantity,
pv.price,
pv.is_male,
pv.shipping_price,
pv.grams,
pv.weight,
pv.weight_unit,
pv.length,
pv.s_position,
pv.option_1,
pv.option_2,
pv.option_3
FROM product p
LEFT JOIN product_media pm
ON pm.p_id = p.id
LEFT JOIN product_options po
ON po.p_id = p.id
LEFT JOIN product_options_value pov
ON pov.p_o_id = po.id
LEFT JOIN product_tags pt
ON pt.p_id = p.id
LEFT JOIN product_variants pv
ON pv.p_id = p.id
WHERE p.provider_id = $1
GROUP BY
p.id,
pm.id,
po.id,
pov.id,
pv.id
LIMIT 1;
型
我非常感谢你的帮助,我不知道该做什么或如何做
2条答案
按热度按时间l7mqbcuq1#
尝试使用
json_strip_nulls()
:字符串
如果您可以使用
jsonb
而不是json
,则首选(more space efficient)。如果您选择使用jsonb
,则可以使用jsonb_strip_nulls()
。42fyovps2#
这个应该可以
字符串
这将检查
pm.id
是否是NULL
,如果是,则返回NULL
,而不是构建JSON
对象。所以当有
NULL
值时,你希望得到一个空数组。你可以用这个更新你的查询使用
COALESCE
将NULL
转换为空数组型