【发布时间】:2020-05-07 19:26:04
【问题描述】:
我在我的 MySQL db 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 上运行。
【问题讨论】:
-
如果您以正常方式而不是 JSON 数组存储数据,这将是一个普通的
INNER JOIN。我还没有看到一个关于 MySQL 中 JSON 的问题,如果不使用 JSON 就不会更容易回答。 -
你是对的,使用另一个表会更容易。但我真的很想尝试使用这种方法。如果我不能,我会使用另一张桌子。
-
我实际上只是在玩 MySQL 数据类型,老实说,使用它并没有付出任何努力,但玩各种可能性实际上很有趣,别担心,我不会在任何项目中使用它:D
标签: mysql sql arrays json database