将整个MySql json列与json对象进行比较的语法是什么?
以下不起作用:
select count(criteria) from my_alerts where criteria = '{"industries": ["1"], "locations": ["1", "2"]}'
Run Code Online (Sandbox Code Playgroud)
即使条件列有值,我也会得到0 {"industries": ["1"], "locations": ["1", "2"]}
如果我错了,请纠正我,但如果两个JSON对象具有相同的密钥集,则每个密钥在两个对象中具有相同的值.键和值的顺序将被忽略.那以下应该是一样的?
{"industries": ["1"], "locations": ["1", "2"]} = {"locations": ["2", "1"], "industries": ["1"]}
Run Code Online (Sandbox Code Playgroud)
*更新*
我已经设法通过转换为json来实现它,如下所示:
select count(criteria) from my_alerts where criteria = CAST('{"industries": ["1"], "locations": ["1", "2"]}' AS JSON)
Run Code Online (Sandbox Code Playgroud)
然而,虽然在比较期间忽略了键的顺序,但仍然比较值的顺序.所以以下是假的:
{"locations": ["1", "2"]} = {"locations": ["2", "1"]}
Run Code Online (Sandbox Code Playgroud)
有没有办法强制比较忽略值的顺序呢?
您可以使用CAST()函数:
SELECT count(criteria)
FROM my_alerts
WHERE criteria = CAST('{"industries": ["1"], "locations": ["1", "2"]}' AS JSON)
Run Code Online (Sandbox Code Playgroud)
您可以使用JSON_CONTAINS以下方法执行此操作:
SELECT COUNT(criteria)
FROM my_alerts
WHERE JSON_CONTAINS(criteria,'{"industries": ["1"], "locations": ["1", "2"]}')
Run Code Online (Sandbox Code Playgroud)
这将执行忽略值顺序的比较,这很关键,因为 MySQL 将重新排序 JSON 属性以提高 INSERT 的效率。
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |