使用 JSON_CONTAINS 函数查询 MySQL 中 JSON 数组字段

假设 order 表中存在一个名为 ItemIds 的字段,该字段存储的是一个 JSON 数组。我们想要查询 OrderItems 表中 Idorder 表的 ItemIds 中的记录。

可以使用 JSON_CONTAINS 函数来实现:

SELECT *
FROM OrderItems
WHERE JSON_CONTAINS((SELECT ItemIds FROM `order` WHERE OrderId = 1), JSON_ARRAY(Id));

上述查询语句中,先通过子查询获取 OrderId 为 1 的 order 记录的 ItemIds 字段值,然后将其转换为 JSON 数组,最后使用 JSON_CONTAINS 函数查询 OrderItems 表中 Id 在该 JSON 数组中的记录。

解释:

  • JSON_CONTAINS(json_doc, json_value) 函数用于判断 json_doc 中是否包含 json_value
  • 子查询 (SELECT ItemIds FROM order WHERE OrderId = 1) 用于获取 OrderId 为 1 的 order 记录的 ItemIds 字段值。
  • JSON_ARRAY(Id)OrderItems 表中的 Id 字段转换为 JSON 数组。

示例:

假设 order 表中有一条记录,其 OrderId 为 1,ItemIds[1, 2, 3],而 OrderItems 表中有以下几条记录:

| Id | Name | |---|---| | 1 | Item A | | 2 | Item B | | 4 | Item D |

执行上述查询语句后,将返回 Id 为 1 和 2 的两条记录,因为它们的 Id 值在 order 表的 ItemIds 中。

注意:

  • JSON_CONTAINS 函数支持多种匹配模式,可以通过第三个参数指定匹配模式。例如,'$.*' 代表匹配任何路径,'$[0]' 代表匹配第一个元素。
  • 如果 ItemIds 字段的值为空或不是有效的 JSON 数组,则查询将不会返回任何结果。
MySQL 查询 JSON 数组字段:使用 JSON_CONTAINS 函数匹配 OrderItems 记录

原文地址: https://www.cveoy.top/t/topic/gQ34 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录