使用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