对于每个键,检查另一个json的json值中是否有一个json值



使用postgres中的SQL,我想知道一个JSON是否是"in"另一个JSON。

例如:

json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}

在上面的情况下,json_2["a"]在json_1["a(]中,json_2]在json-1["b"]中。

如果我知道json的所有可能的键,我就可以很容易地按照每个键编写上面的内容。然而,问题是我不知道JSON中有多少个键以及哪些键。如果JSON_2在JSON_1中,我如何检查JSON中的每个键?

我不确定您想要什么输出格式,但这将为每个键创建一行,并使用布尔值说明json_2键的数组值是否包含在json_1键的值中。

CREATE TABLE t (json_1 JSONB, json_2 JSONB);
INSERT INTO t
VALUES
('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":[]}',
'{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');

查询#1

SELECT key, value <@ (json_1->key) AS contained
FROM (
SELECT (JSONB_EACH(json_2)).*, json_1
FROM t
) j;

退货:

| key | contained |
| --- | --------- |
| a   | true      |
| b   | true      |
| c   | false     |
| d   | false     |

查看DB Fiddle

相关内容

  • 没有找到相关文章

最新更新