首页 > 解决方案 > 如何在 MySQL 中检查 JSON 数组中的任何类似元素

问题描述

我在 JSON 整数数组的表 A 中有一行。

我有一个表 B,其行有一个(可能为空)JSON 对象数组的字段,每个对象都有一个“父”字段。

  table A
+-----------+
| foo       |
+-----------+
| [1, 2]    |
+-----------+

  table B
+--------------------------------+
| bar                            |
+--------------------------------+
| [{"parent": 1}]                |
| [{"parent": 2}, {"parent": 3}] |
| [{"parent": 4}]                |
| []                             |
+--------------------------------+

如何从表 B 中获取其 bar 中的对象没有任何父级匹配 foo 中的任何元素的行?即这里的最后两行应该被返回。

我尝试用 做一些事情SELECT JSON_EXTRACT(bar, '$[*].parent') FROM B,但结果是一个 JSON 数组

+-----------------------------------------+
| SELECT JSON_EXTRACT(bar, '$[*].parent') |
+-----------------------------------------+
| [1]                                     |
| [2, 3]                                  |
| [4]                                     |
| NULL                                    |
+-----------------------------------------+

并且该函数JSON_CONTAINS()不返回部分匹配:

“当且仅当候选数组中的每个元素都包含在目标的某个元素中时,候选数组才包含在目标数组中。” MySQL 文档

任何帮助是极大的赞赏。MySQL 版本 5.7.22

标签: mysqljson

解决方案


推荐阅读