在postgres上使用SQLalchemy时,我想知道一个JSON是否在另一个JSON中,应该在JOIN的ON子句中,所以类似:
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']是否在SQLAlchemy的json_1 ['b']中。 不确定IN是否可以在ON子句中使用,但可能包含一个或其他内容?
答案 0 :(得分:1)
如果数据类型为jsonb
,那么我认为PostgreSQL支持contains
查询来查看一个JSON是否是另一个JSON的子集。这样,SQLAlchemy将支持执行这种类型的SELECT
。请查看以下链接以获取更多详细信息:
我还要指出的是,如果PostgreSQL中的数据类型为json
,那么您可能会很不走运,因为PostgreSQL似乎并不本地支持将这些对象相互比较。
除非如此,否则您可能会使用Python将JSON值转换为字符串并执行基于正则表达式的比较-但我担心这种方法会失败,因为在以下示例中,我想您会考虑使用{{ 1}}仍然是json_2
的子集:
json_1
除非您 ,否则您可能在subgraph isomorphism problem的领土内。 networkx
包含VF2 algorithm的实现,这可能有助于执行此比较-但这种方法可能很危险。