令人惊讶的是,我找不到很多关于在MySQL中比较两个JSON数据类型字段的信息.人们似乎总是将JSON字段与转换为JSON对象的字符串进行比较. 无论如何,我希望这不是一个错误,有人能告诉我如何处理:
我有两张桌子.
CREATE TABLE
test
(
p_id VARCHAR(40),
p_json json
) ;
CREATE TABLE
test2
(
p_id VARCHAR(40),
p_json json
) ;
我在每一张桌子上都放了一条记录.这条记录looks不同,但它确实是相同的JSON对象,因为ordering of keys and values should not matter…即使在嵌套数组的对象中..
insert into test values ('1',cast('{"recs": [{"priority": 2, "code": "204666"}, {"priority": 1, "code": "204624"}]}' as json));
insert into test2 values ('1',cast('{"recs": [{"priority": 1, "code": "204624"}, {"priority": 2, "code": "204666"}]}' as json));
现在,当我try 比较这两个json记录时,它们被视为不同的对象.
select t.*
from test t
join test2 t2 on t.p_json = t2.p_json
;
但没有记录返回.我希望记录被返回,因为对象实际上是相同的,只要json对象go .对吧?
我的json对象要复杂得多,有许多嵌套的数组,等等.所以我真的希望没有人建议我需要分解对象并分别比较子对象/数组和值.