mysql - 有没有办法检查一个 json 数组是否至少包含 MySQL 中另一个 json 数组的一项?

标签 mysql sql arrays json database

我在我的 MySQL 数据库 json 字段中存储了一些 json 数组。
例如:["Python", "C", "C++", "C#", "R"]

我的数据库的一个例子:

    |  name  |      techs       |
    |--------|------------------|
    | victor | ["Python", "R"]  |
    | anne   | ["C#", "Python"] |

我需要搜索 json 数组至少包含另一个 json 数组的一项的行。问题出在我正在执行的查询中:

   select name from devs  
   where json_contains('techs', '["Python"]')

这实际上工作正常并返回数组包含“Python”的所有行(在这个例子中,[Victor, Anne]),但是当我尝试传递不存在于任何数组中的项目时:

   select * from devs  
   where json_contains('techs', '["Python", "Java"]')

这没有返回任何内容,因为没有包含“Python”和“Java”的数组。也许,我想在他们的 json 数组中接收所有带有“Python”或“Java”的行。

这样,有没有语法可以按照我想要的方式返回数据?
提前致谢。

有用信息: MySQL:v8.0,在 Windows 10 上运行。

最佳答案

MySQL 8.0 具有函数 JSON_OVERLAPS() ,这正是您所要求的:

Compares two JSON documents. Returns true (1) if the two document have any key-value pairs or array elements in common.

When two comparing two arrays, JSON_OVERLAPS() returns true if they share one or more array elements in common, and false if they do not.

您可以在自连接查询中使用它,例如:

select t.*
from mytable t
inner join mytable t1 on json_overlaps(t1.techs, t2.techs)

关于mysql - 有没有办法检查一个 json 数组是否至少包含 MySQL 中另一个 json 数组的一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59846109/

相关文章:

javascript - [Wordpress + PHP + MySQL]插件内的数据库SELECT查询没有返回结果

mysql - 多维mysql选择?

mysql - SQL替换查询结果中另一个表中的多个变量

java - 如何在 H2 中设置 sysdate? (供测试用)

mysql - 如何从 java.sql.Date 转换为 ZonedDateTime

php - 如何将这两个 SQL 查询合并为一个

java - 为什么这个 JPA 查询不返回我的特定类的列表?

c - 如何将 '=' 附加到字符串

java - 小于 ObjectOutputStream 基元的基元数组

javascript - 如何阻止一个innerHtml表格一遍又一遍地重复?