Значение JSON одного JSON в списке значений JSON другого JSON - PullRequest
0 голосов
/ 03 декабря 2018

С SQLalchemy на postgres я хочу знать, является ли один JSON 'IN' другим JSON, который должен быть в условии ON в JOIN, поэтому что-то вроде:

SELECT json_1, ... FROM table_1
JOIN
SELECT json_2, ... FROM table_2
ON json_1['b'] IN json_2['b']

Где, например:

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

Итак, я хочу знать, находится ли json_2 ['b'] в json_1 ['b'] в SQLAlchemy.Не уверен, что IN можно даже использовать в предложении ON, но, возможно, содержит в нем или что-то еще?

1 Ответ

0 голосов
/ 29 июля 2019

Если тип данных jsonb, то я считаю, что PostgreSQL поддерживает contains запросы, чтобы увидеть, является ли один JSON подмножеством другого.Таким образом, SQLAlchemy будет поддерживать выполнение этого типа SELECT.Для получения более подробной информации перейдите по следующим ссылкам:

Я также хотел бы отметить, что если тип данных в PostgreSQL равен json, вам может не повезти, поскольку PostgreSQL не поддерживает исходное сравнение этих объектов для каждого из них.прочее.

За исключением этого, вы могли бы потенциально использовать Python для преобразования значений JSON в строки и выполнения сравнения на основе регулярных выражений - но меня беспокоит, что этот подход не работает, потому что в следующем примере я представляю васбудет считать json_2 подмножеством json_1:

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

И если исключить , что , вы можете оказаться на территории проблемы изоморфизма подграфа .networkx содержит реализацию алгоритма VF2 , которая может помочь выполнить это сравнение, но этот подход может быть коварным.

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