检查包含json字符串的列是否具有特定值

时间:2017-10-01 16:50:16

标签: mysql sql arrays json string

我有一份工作'像这样的表:

'image/encoded': dataset_util.bytes_feature(encoded_jpg)

技能' column包含一个JSON数组。

我需要选择能够满足一项或多项技能的工作 - 这样的事情(但显然不会起作用):

----------------------------------------------
|job_id |name                    |skills     |
----------------------------------------------
|1      |Job 1                   |[1]        |
|2      |Job 2                   |[2,3]      |
|3      |Job 3                   |[4,5,6]    |
----------------------------------------------

应该返回:

SELECT * FROM jobs WHERE skills IN (1,4)

3 个答案:

答案 0 :(得分:1)

您可以使用 REGEXP

select * from jobs where skills REGEXP '[[:<:]]1[[:>:]]|[[:<:]]4[[:>:]]'

追加[[:<:]]之前和[[:>:]]之后,以匹配确切的值和|以匹配多个值。

<强> >>>Demo<<<

答案 1 :(得分:0)

这些查询中的任何一个都会返回您的预期输出。

选项1

如果skills是一个字符串(varchar,text),您可以使用LIKE字符串比较函数。

SELECT * FROM jobs WHERE skills LIKE "%1%" OR skills LIKE "%4%";

选项2

或者,如果您更喜欢正则表达式,则可以使用REGEXP函数。

SELECT * FROM jobs WHERE skills REGEXP "1|4";

答案 2 :(得分:0)

在数据库中存储JSON适用于您不需要报告或查询所述字段的情况,因为它效率较低,并且没有充分利用多年的查询性能优化由数据库供应商。 我建议使用2个表,一个用于工作,另一个用于技能,并在技能表上有一个名为job_id的字段,因此您可以简单地执行如下查询:

从job.id所在的职位中选择职位。*(选择技能中的job_id,其中,技能为(1,4))

技能表可以稍后扩展为拥有更多字段或者可能与其他技能相关联。

希望有所帮助!