如何解决MySQL选择行,其中JSON数组列是另一个数组的子集
嘿,我有一个machines
表,其中有一个名为cells
的JSON数组列。一些示例数据:
machine_id | cells
-----------------------------------------
1 | ['TE001','GM0002']
2 | ['TE001','TK123','AW123']
3 | ['TK123','GS123']
我还有一系列与特定机器版本兼容的单元格,例如
('TE001','GM0002','GS123','LL321')
我需要一个查询来提取所有cells
全部包含在我的计算机版本单元中的计算机。
machine_id | shouldSelect | explaination
------------------------------------
1 | true | both TE001 and GM0002 are in the compatible list
2 | false | AW123 is not in the compatible list
3 | true | both TK123 and GS123 are in the compatible list
我找不到实现这一目标的可行方法,我尝试了JSON_OVERLAPS
和MEMBER OF
的某种组合,但没有成功
解决方法
这可以通过复杂的查询来解决:
SELECT
machines.*,JSON_LENGTH(machines.cells),sum(data.code MEMBER OF (machines.cells))
FROM
machines,JSON_TABLE(
'["TE001","GM0002","TK123","GS123","LL321"]',"$[*]"
COLUMNS(code varchar(32) PATH "$")
) data
GROUP BY machines.machine_id,machines.cells
HAVING JSON_LENGTH(machines.cells) = sum(data.code MEMBER OF (machines.cells))
;
这里是一个小提琴:SQLize.online
该方法是使用JSON_TABLE将JSON转换为表并将其连接到源表。 我没有测试查询的性能,但是它可以完成这项工作:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。