gpt4 book ai didi

sql - 比较 Postgres 中的 JSON 数组

转载 作者:行者123 更新时间:2023-11-29 11:47:00 25 4
gpt4 key购买 nike

我有一张表代表购物车中不同时刻的元素。购物车商品以 JSON 格式存储,一列包含 before 值,另一列包含 after 值。

我的任务是比较购物车并确定:添加的商品、删除的商品以及价格/数量的变化。

我知道我可以使用 json_array_elements 和交叉连接来解压缩 JSON blob,从 JSON 值创建一个项目表。但我想不出一种比较购物车商品的有效方法。我可以在 SQL 中执行此操作吗?

这是一个小例子 SQL Fiddle :

CREATE TABLE t (
id INT,
before JSON,
after JSON
);

INSERT INTO t VALUES (
1,
'[{"category":"item","id":"1","price":8,"quantity":1},{"category":"item","id":"2","price":20,"quantity":1},{"category":"item","id":"3","price":3,"quantity":1}]',
'[{"category":"item","id":"2","price":40,"quantity":1},{"category":"item","id":"3","price":3,"quantity":1},{"category":"item","id":"4","price":2,"quantity":1}]'
);

这个昂贵的查询没有解决我的问题:

select
id,
b.value->>'id' as id_before,
b.value->>'category' as category_before,
b.value->>'price' as price_before,
b.value->>'quantity' as quantity_before,
a.value->>'id' as id_after,
a.value->>'category' as category_after,
a.value->>'price' as price_after,
a.value->>'quantity' as quantity_after
from t
CROSS JOIN json_array_elements(before) b
CROSS JOIN json_array_elements(after) a;

最佳答案

您可以使用 except all 来获取两个 json 之间的差异,由此您可以获取添加和删除的项目。为了找到差异,我的查询将是:

select
value->>'id',
value->>'category',
value->>'price',
value->>'quantity'
FROM
json_array_elements(before)
EXCEPT ALL
select
value->>'id',
value->>'category',
value->>'price',
value->>'quantity'
FROM
json_array_elements(after)

关于sql - 比较 Postgres 中的 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43254651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com