我需要你的点子来解决这个奇怪的问题。
表结构:id (increment), meta (JSON).
Meta看起来像这样:
{
"response": [
{
"name": "x",
"file_id": 957353,
"user_id": 11111,
"lastname": "x",
"born_date": "1915-10-29",
"file_path": "xxxx/xx/xx/xxxxxxxxx",
"valid_date": "2099-01-01",
"document_id": 33333,
"document_type": "xxx_x_x_x",
}
],
"evaluation": [
{
"name": "a",
"file_id": 957353,
"user_id": 11111,
"lastname": "b",
"born_date": "1915-10-29",
"file_path": "xxxx/xx/xx/xxxxxxxxx",
"valid_date": "2099-01-01",
"document_id": 33333,
"document_type": "xxx_x_x_x",
}
]
} 我必须将回应与评估进行比较。我需要一些东西,比如diff或数据是否相同的信息。它必须是SQL查询。
我正在寻找这样的结果:
id | identical | diff ?
1 | 1 | null
2 | 0 | 'xxxx => xxx'
3 | 1 | null这是完全可能的吗?
发布于 2020-08-20 18:03:08
您可以使用MySQL JSON_CONTAINS函数(5.7及更高版本)比较两者,但它将只返回response是否包含evaluation的结构,反之亦然。这意味着您必须以两种方式执行JSON_CONTAINS,以查看它们是否100%相等。
关于diff:这在内置函数中是不可能的。可以使用存储过程遍历这两个对象,确定元素是否存在、不同或缺失,并以不同的格式输出。在Stackoverflow上有一个类似的尝试:https://codereview.stackexchange.com/questions/213951/mysql-json-diff-procedure
https://stackoverflow.com/questions/63502305
复制相似问题