Проверьте, находится ли одно значение json в значении json из другого JSON, для каждого ключа - PullRequest
0 голосов
/ 27 ноября 2018

С SQL в postgres я хочу знать, является ли один JSON 'IN' другим JSON.

Например:

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

В указанном выше случае json_2 ["a"] находится в json_1 ["a"], а json_2 ["b"] находится в json_1 ["b"].

Если бы я знал все возможные ключи json, я бы легко мог написать выше для каждой клавиши.Однако проблема в том, что я не знаю, сколько и какие ключи в JSON.Как я могу проверить каждый ключ в JSON, если json_2 находится в json_1?

1 Ответ

0 голосов
/ 27 ноября 2018

Я не уверен в том, какой выходной формат вы хотите, но при этом будет создаваться по одной строке на ключ с логическим значением, указывающим, содержатся ли значения массива ключа 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     |

Просмотр в БДFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...