【问题标题】:JSON_CONTAINS() with an array of JSON objects in MySQLJSON_CONTAINS() 与 MySQL 中的 JSON 对象数组
【发布时间】:2021-03-07 07:58:11
【问题描述】:

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

+----+----------------------------------------------------------+
| id | arr                                                      |
+----+----------------------------------------------------------+
|  1 | [{"name": "aman"}, {"name": "jay"}]                      |
|  2 | [{"name": "yash"}, {"name": "aman"}, {"name": "jay"}] |
+----+----------------------------------------------------------+

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

这是我的查询:

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

我收到以下错误:

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

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

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

【问题讨论】:

    标签: mysql sql json mysql-json


    【解决方案1】:

    您必须使用 JSON_SEARCH:

    SELECT JSON_SEARCH(arr, 'one', 'jay', NULL, '$[*].name') IS NOT NULL
    FROM test 
    WHERE id=1;
    

    【讨论】:

      【解决方案2】:

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

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

      db<>fiddle demo

      例子:

      +-----+--------------------------------------------------------+---+
      | id  |                          arr                           | r |
      +-----+--------------------------------------------------------+---+
      |  1  | [{"name": "aman"}, {"name": "jay"}]                    | 1 |
      |  2  | [{"name": "yash"}, {"name": "aman"}, {"name": "jay"}]  | 1 |
      |  3  | [{"name": "yash"}, {"name": "aman"}]                   | 0 |
      +-----+--------------------------------------------------------+---+
      

      【讨论】:

        猜你喜欢
        • 2020-06-14
        • 2020-09-12
        • 2017-09-01
        • 2017-11-01
        • 1970-01-01
        • 2019-02-28
        • 2019-11-25
        • 1970-01-01
        • 2020-12-24
        相关资源
        最近更新 更多