JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组

Jay*_*iar 7 mysql sql json mysql-json

这是一个示例数据库“test”,其中包含一个包含 JSON 对象数组的 JSON 列“arr”

+----+----------------------------------------------------------+
| id | arr                                                      |
+----+----------------------------------------------------------+
|  1 | [{"name": "aman"}, {"name": "jay"}]                      |
|  2 | [{"name": "yash"}, {"name": "aman"}, {"name": "jay"}] |
+----+----------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我想使用 JSON_CONTAINS 来了解数组中对象的特定键中是否存在值。

这是我的查询:

SELECT JSON_CONTAINS(arr, '"jay"', '$[*].name') from test WHERE id=1;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误 3149 (42000):在这种情况下,路径表达式可能不包含 * 和 ** 标记或数组范围。

我知道我可以尝试使用JSON_EXTRACT()这个,但是我在这里做错了什么?

有没有办法JSON_CONTAINS在 MySQL 中使用 JSON 对象数组。

Luk*_*zda 12

是的,可以使用以下语法:

SELECT JSON_CONTAINS(arr, '{"name": "jay"}') from test WHERE id=1;
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示

例子:

+-----+--------------------------------------------------------+---+
| id  |                          arr                           | r |
+-----+--------------------------------------------------------+---+
|  1  | [{"name": "aman"}, {"name": "jay"}]                    | 1 |
|  2  | [{"name": "yash"}, {"name": "aman"}, {"name": "jay"}]  | 1 |
|  3  | [{"name": "yash"}, {"name": "aman"}]                   | 0 |
+-----+--------------------------------------------------------+---+
Run Code Online (Sandbox Code Playgroud)

  • 我知道我们不应该说“谢谢”,但是伙计!我快要失去理智了!非常感谢您贡献这些知识! (2认同)