【问题标题】:JSON_CONTAINS for multiple attributes on object in array?JSON_CONTAINS 用于数组中对象的多个属性?
【发布时间】:2020-06-14 21:13:11
【问题描述】:

目前使用 MYSQL 5.7,即将迁移到 8.0。 我们的数据库中有一个 json 字段,其值如下所示:

[
  {
     "first_name":"bob",
     "last_name":"lisserman"
  },
  {
     "first_name":"bob",
     "last_name":"rippleman"
  },
  {
     "first_name":"joe",
     "last_name":"roterlam"
  }
]

我正在尝试编写一个查询,该查询在数组中查找包含“first_name”=“bob”和“last_name”=“rippleman”的对象的记录

JSON_CONTAINS 是否支持这样的搜索?

【问题讨论】:

  • 您使用的是哪个版本的 MySQL?
  • @GMB - 在描述中添加了版本信息。现在是 MYSQL 5.7,希望尽快迁移到 8.0。

标签: mysql sql arrays json


【解决方案1】:

12.17.3 Functions That Search JSON Values :: JSON_CONTAINS(target, candidate[, path]):

...

  • 当且仅当候选对象中的每个键在 目标和与候选键关联的值包含在 与目标键关联的值。

...

MySQL 5.7 和 MySQL 8.0 试用:

SELECT
  `id`,
  `json_field`
FROM
  `tbl_table`
WHERE
  JSON_CONTAINS(`json_field`, '{"first_name": "bob", "last_name": "rippleman"}');

dbfiddle

MySQL 8.0 试用:

SELECT
  `tbl_table`.`id`,
  `tbl_table`.`json_field`
FROM
  `tbl_table`, JSON_TABLE(
    `json_field`,
    '$[*]'
    COLUMNS(
      `first_name` VARCHAR(50) PATH '$.first_name',
      `last_name` VARCHAR(50) PATH '$.last_name'
    )
) `der`
WHERE
  `der`.`first_name` = 'bob' AND
  `der`.`last_name` = 'rippleman';

dbfiddle

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 2021-03-07
    • 1970-01-01
    • 2015-05-17
    • 2016-08-12
    • 1970-01-01
    • 2020-09-11
    • 2015-12-08
    • 2018-10-09
    相关资源
    最近更新 更多