尝试完成此任务;
表产品
id | product_id | product
------------------------------
1 | 123| acme widget
------------------------------
2 | 456| acme gadget
表格订单
id | lineItems
------------------------------
1 | [{ id: 123, quantity: 10}, { id: 456, quantity: 5}]
使用
SELECT a.*
FROM orders a
LEFT OUTER JOIN products b ON b.product_id = a.products -> 'id'
以便返回
id | product_id | product | quantity
------------------------------------------
1 | 123 | acme widget | 10
------------------------------------------
1 | 456 | acme gadget | 5
答案 0 :(得分:0)
我解决了这个问题。我创建了一个视图
CREATE VIEW view_lineItems
AS
SELECT
aa.id AS order_id,
-- (p->>'id')::bigint AS product_id,
bb.*,
(p->>'quantity')::integer AS quantity
FROM public.pim_orders aa, json_array_elements(aa.products) p
LEFT OUTER JOIN pim_batch bb ON bb.product_id = (p->>'id')::bigint
ORDER BY aa.id;
然后将该视图加入到原始查询(存储过程)并在我需要的列中调用。
由于订单项视图的性质,我无法创建主键 - 我需要物化视图 - 因为每个订单项可能有多个产品,并且也可以针对不同的订单多次列出同一产品。
但这可以满足我的需求:)我现在能够决定哪个视图我会为返回的结果加入特定的表 - 无论是在订单上,还是在订单项上。
喝彩!