MySQL 查询 JSON 数组字段:使用 JSON_CONTAINS 函数匹配 OrderItems 记录
使用 JSON_CONTAINS 函数查询 MySQL 中 JSON 数组字段
假设 order 表中存在一个名为 ItemIds 的字段,该字段存储的是一个 JSON 数组。我们想要查询 OrderItems 表中 Id 在 order 表的 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 FROMorderWHERE 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 数组,则查询将不会返回任何结果。
原文地址: https://www.cveoy.top/t/topic/gQ34 著作权归作者所有。请勿转载和采集!