从postgresql中的json列加入id上的两个表

时间:2017-02-03 01:24:43

标签: sql json postgresql

尝试完成此任务;

表产品

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

1 个答案:

答案 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;

然后将该视图加入到原始查询(存储过程)并在我需要的列中调用。

由于订单项视图的性质,我无法创建主键 - 我需要物化视图 - 因为每个订单项可能有多个产品,并且也可以针对不同的订单多次列出同一产品。

但这可以满足我的需求:)我现在能够决定哪个视图我会为返回的结果加入特定的表 - 无论是在订单上,还是在订单项上。

喝彩!